【spring】属性注入

【spring】属性注入【spring】属性注入

大家好,又见面了,我是你们的朋友全栈君。

      spring的属性注入是bean管理中的一个非常重要的内容,它可以通过有参数的构造函数注入属性,也可以通过set方法注入属性。包括基本类型的属性注入、对象类型的属性注入和复杂类型的属性注入。

一.基本类型

有参数构造

代码实现:

public class User{

	private String username;

	public User(String username) {
		this.username = username;
	}

	public void test1(){
		System.out.println("User....."+username);
	}	
}

spring配置文件实现:

        <!-- 使用有参数的构造注入属性 -->
        <bean id="user" class="cn.itcast.property.User">
        	<!-- 使用有参的构造注入 -->
        	<constructor-arg name="username" value="张三"></constructor-arg>
        </bean>

      有参数的构造函数注入属性的时候用的是<constructor-arg/>标签。

set方法设置

代码实现:

public class Book {

	private String bookname;
	//set方法
	public void setBookname(String bookname) {
		this.bookname = bookname;
	}
	
	public void demobook(){
		System.out.println("book......."+bookname);
	}	
}

spring配置文件实现:

        <!-- 使用set方法注入属性 -->
        <bean id="book" class="cn.itcast.property.Book">
        	<!-- 注入属性值 
        		name属性值:类里面定义的属性名称
        		value属性:设置具体的值 -->       	
        	<property name="bookname" value="Spring实战"></property>
        </bean>

      使用set方法注入属性时用的是<property/>标签。

二.对象类型

      我们在项目实战中,service一般都需要调用dao,这时候就需要把dao对象注入到service中。首先我们创建UserService和UserDao两个类,并在UserService类中定义UserDao类型的属性。

public class UserService {

	//1.定义dao类型属性
	private UserDao userDao;
	//生成set方法
	public void setUserDao(UserDao userDao) {
		this.userDao = userDao;
	}
	
	public void add(){
		System.out.println("service.........");
		//在service里面得到dao类对象,才能调用dao里面的方法
		userDao.add();
	}
}
public class UserDao {

	public void add(){
		System.out.println("dao.........");
	}
}

      在配置文件中创建userService和userDao对象,并将userDao注入到userService中。

        <!-- 注入对象类型属性 -->
        <!-- 配置service和dao对象 -->
        <bean id="userDao" class="cn.itcast.ioc.UserDao"></bean>
        <bean id="userService" class="cn.itcast.ioc.UserService">
        	<!-- 注入dao对象
        		name属性值:service类里面属性名称
        		          字符串用value,对象用ref
        		ref属性:dao配置bean标签中id值 -->        	
        	 <property name="userDao" ref="userDao"></property>
        </bean>

三.复杂类型

      除了上面两种类型可以注入之外,还有复杂类型属性的注入,比如数组、list、map、properties等。

public class Person {

	private String[] arrs;
	private List<String> list;
	private Map<String,String> map;
	private Properties properties;

	public void setArrs(String[] arrs) {
		this.arrs = arrs;
	}
	public void setList(List<String> list) {
		this.list = list;
	}
	public void setMap(Map<String, String> map) {
		this.map = map;
	}
	public void setProperties(Properties properties) {
		this.properties = properties;
	}
	
	public void test(){
		System.out.println("arrs:"+arrs);
		System.out.println("list:"+list);
		System.out.println("map:"+map);
		System.out.println("properties:"+properties);
	}
}
<!-- 注入复杂类型属性值 -->
        <bean id="person" class="cn.itcast.ioc.Person">
        	<!-- 数组 -->
        	<property name="arrs">
        		<list>
        			<value>张三</value>
        			<value>李四</value>
        			<value>王五</value>
        		</list>
        	</property>
        	<!-- list -->
        	<property name="list">
        		<list>
        			<value>Tom</value>
        			<value>Bob</value>
        			<value>Mary</value>
        		</list>
        	</property>
        	<!-- map -->
        	<property name="map">
        		<map>
        			<entry key="aa" value="小明"></entry>
        			<entry key="bb" value="小红"></entry>
        			<entry key="cc" value="小美"></entry>
        		</map>
        	</property>
        	<!-- properties -->
        	<property name="properties">
        		<props>
        			<prop key="driverclass">com.mysql.jdbc.Driver</prop>
        			<prop key="username">root</prop>
        		</props>
        	</property>
        </bean>

      今天介绍的都是通过配置文件来实现bean管理,而我们平时经常用的是通过注解来管理bean,所以接下来将为大家介绍注解方式的bean管理。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/105636.html原文链接:https://javaforall.net

赞 (0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • flex垂直居中问题「建议收藏」

    flex垂直居中问题「建议收藏」.container{ display:flex; justify-content:center; aligin-items:center;}垂直居中当内容超过container,上方会超出容器设置.item{ margin:auto;}或:justify-content:safecenteralign-self:safecenter

    2022年6月4日
  • pycharm2018.3.7安装教程_linux安装pycharm

    pycharm2018.3.7安装教程_linux安装pycharm1.下载pycharm软件包   网页下载:http://www.jetbrains.com/pycharm/download/#section=linux  wget直接下载:curlhttps://download.jetbrains.8686c.com/python/pycharm-professional-2018.1.4.tar.gz  curl直接下载:curlht…

    2022年8月28日
  • String、StringBuffer与StringBuilder之间区别

    String、StringBuffer与StringBuilder之间区别String StringBuffer StringBuilder String的值是不可变的,这就导致每次对String的操作都会生成新的String对象,不仅效率低下,而且浪费大量优先的内存空间 StringBuffer是可变类,和线程安全的字符串操作类,任何对它指向的字符串的操作都不会产生新的对象。每个StringBuffer对象都有一定的缓冲区…

    2022年6月28日
  • ajax实训总结_培训日记

    ajax实训总结_培训日记今天由梁言兵老师为大家讲解ajax,他首先介绍了什么是web2.0及web2.0的应用。ajax框架:客户端框架:DOJO,bindows,Rico服务器端框架:DWR,JSON,buffalo基础库:prototype.js这次讲解的是buffalo框架。buffalo要通过一个注册文件注册Bean对象,buffalo配置文件中的配置项是“对象实例名=完全限定类名”。客户端代码:varEN…

    2022年9月12日
  • Thinkphp中的assign() 和 display()

    Thinkphp中的assign() 和 display()说到$this->assign()与$this->display()想必用过TP框架的都不陌生,那么今天我们就来说说他们的作用及其他用法。先说$this->assign()

    2022年7月1日
  • wake on lan 远程唤醒/远程开机中的所有设置细节(arp静态绑定解决长时间关机无法唤醒)

    wake on lan 远程唤醒/远程开机中的所有设置细节(arp静态绑定解决长时间关机无法唤醒)远程开机这个功能实在屌爆了,工作中会经常遇到需要远程开机的情景,比如说,晚上在家里,突然接到领导的电话需要改东西,然而家里的电脑又没有工作环境,各种工具软件都没有安装,这时如果往公司跑一趟真是麻烦,或者需求等不及你往公司跑一趟,也许这途中公司会损失更多。或者,晚上在家里工作了,第二天忘记把资料带回公司,这时远程开机也显得尤为重要。总之,如果你有远程办公的需求,就会用到远程开机。

    2022年5月22日

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号