Spring的几种注入类型
2012-03-09 23:07
316 查看
入类型(Injecting dependencies)
setter(重要)
构造方法(使用的非常少)
接口注入(可以忘记)
setter注入类型Setter Injection
就是在bean中使用setXXX方法进行注入来
在bean类中,成员属性需要setXXX方法如下:
public class UserService {
private UserDao userDao = new UserDaoImpl();
public UserDao getUserDao() {
return userDao;
}
public void setUserDao(UserDao userDao) {
this.userDao = userDao;
}
public void add(User u){userDao.save(u);}
}
spring配置文件如下:
<bean id="u" class="com.wjt276.dao.impl.UserDaoImpl" >
</bean>
<bean id="userService" class="com.wjt276.service.UserService">
<property name="userDao" ref="u"/><!-- 这里的ref表示参考id=u的那个bean -->
<!--或是下面的方式
<property name="userDao">
<ref bean="u"></ref>
</property> -->
</bean>
构造方法Constructor Injection
首先在bean类中需要有成员属性作为参数的构造方法
代码如下:
public class UserService {
private UserDao userDao = new UserDaoImpl();
public UserService(UserDao userDao) {
super();
this.userDao = userDao;
}
public UserDao getUserDao() {return userDao;}
public void setUserDao(UserDao userDao) { this.userDao = userDao;}
public void add(User u){ userDao.save(u);}
}
注意:背景较深的代码为构造方法,带有参数的构造方法
spring配置文件如下:
<bean id="u" class="com.wjt276.dao.impl.UserDaoImpl" > </bean>
<bean id="userService" class="com.wjt276.service.UserService">
<constructor-arg>
<bean class="com.wjt276.dao.impl.UserDaoImpl"></bean>
<!-- <ref bean="u"/> -->
<!--
需要注意的:
使用<bean>表示,重新new一个bean然后注入进去,
使用<ref>表示,使用已经new好的bean,这是只是引用它。
-->
</constructor-arg>
</bean>
使用<constructor-arg>和其子标签<bean>或<ref>进行构造方法注入
当构造方法注入时,构造方法中有多个参数时,可以使用以下两种方式注入:
bean代码:
public class ExampleBean {
private int years;
private String ultimateAnswer;
public ExampleBean(int years, String ultimateAnswer) {
this.years = years;
this.ultimateAnswer = ultimateAnswer;
}
}
1、参数类型方式进行区分参数:
xml配置文件:
<bean id="exampleBean" class="examples.ExampleBean">
<constructor-arg type="int" value="7500000"/>
<constructor-arg type="java.lang.String" value="42"/>
</bean>
注意:这样就是参数类型为int的注入7500000,而参数类型为java.lang.String的参数注入”42”,但这个方法不适合多个参数是相同的类型。
2、利用索引进行区分参数
xml配置文件
<bean id="exampleBean" class="examples.ExampleBean">
<constructor-arg index="0" value="7500000"/>
<constructor-arg index="1" value="42"/>
</bean>
注意:index=0的注入到第一个参数,index=1的注入到第二个参数。
构造方法的注入不方便,所以我们需要使用setter注入方式。
setter(重要)
构造方法(使用的非常少)
接口注入(可以忘记)
setter注入类型Setter Injection
就是在bean中使用setXXX方法进行注入来
在bean类中,成员属性需要setXXX方法如下:
public class UserService {
private UserDao userDao = new UserDaoImpl();
public UserDao getUserDao() {
return userDao;
}
public void setUserDao(UserDao userDao) {
this.userDao = userDao;
}
public void add(User u){userDao.save(u);}
}
spring配置文件如下:
<bean id="u" class="com.wjt276.dao.impl.UserDaoImpl" >
</bean>
<bean id="userService" class="com.wjt276.service.UserService">
<property name="userDao" ref="u"/><!-- 这里的ref表示参考id=u的那个bean -->
<!--或是下面的方式
<property name="userDao">
<ref bean="u"></ref>
</property> -->
</bean>
构造方法Constructor Injection
首先在bean类中需要有成员属性作为参数的构造方法
代码如下:
public class UserService {
private UserDao userDao = new UserDaoImpl();
public UserService(UserDao userDao) {
super();
this.userDao = userDao;
}
public UserDao getUserDao() {return userDao;}
public void setUserDao(UserDao userDao) { this.userDao = userDao;}
public void add(User u){ userDao.save(u);}
}
注意:背景较深的代码为构造方法,带有参数的构造方法
spring配置文件如下:
<bean id="u" class="com.wjt276.dao.impl.UserDaoImpl" > </bean>
<bean id="userService" class="com.wjt276.service.UserService">
<constructor-arg>
<bean class="com.wjt276.dao.impl.UserDaoImpl"></bean>
<!-- <ref bean="u"/> -->
<!--
需要注意的:
使用<bean>表示,重新new一个bean然后注入进去,
使用<ref>表示,使用已经new好的bean,这是只是引用它。
-->
</constructor-arg>
</bean>
使用<constructor-arg>和其子标签<bean>或<ref>进行构造方法注入
当构造方法注入时,构造方法中有多个参数时,可以使用以下两种方式注入:
bean代码:
public class ExampleBean {
private int years;
private String ultimateAnswer;
public ExampleBean(int years, String ultimateAnswer) {
this.years = years;
this.ultimateAnswer = ultimateAnswer;
}
}
1、参数类型方式进行区分参数:
xml配置文件:
<bean id="exampleBean" class="examples.ExampleBean">
<constructor-arg type="int" value="7500000"/>
<constructor-arg type="java.lang.String" value="42"/>
</bean>
注意:这样就是参数类型为int的注入7500000,而参数类型为java.lang.String的参数注入”42”,但这个方法不适合多个参数是相同的类型。
2、利用索引进行区分参数
xml配置文件
<bean id="exampleBean" class="examples.ExampleBean">
<constructor-arg index="0" value="7500000"/>
<constructor-arg index="1" value="42"/>
</bean>
注意:index=0的注入到第一个参数,index=1的注入到第二个参数。
构造方法的注入不方便,所以我们需要使用setter注入方式。
相关文章推荐
- spring笔记--依赖注入之针对不同类型变量的几种注入方式
- Spring @Autowired 注入集合类型的问题
- Spring 几种属性的注入
- Spring、基本类型属性和集合类型属性的注入
- 关于spring的注入类型
- (Spring In Action)bean注入类型的限定
- 解释spring的ioc? 几种注入依赖的方式?spring的优点?
- Spring通过@Value注解注入属性的几种方式
- 编码实现Spring 利用@Resource注解实现bean的注入,xml实现基本数据类型的注入
- Spring、基本类型属性和集合类型属性的注入
- Spring-IoC的注入方式及注入不同的数据类型
- springboot + redis 操作几种数据类型
- Spring、基本类型属性和集合类型属性的注入
- spring如何注入Date类型的属性
- Spring之注入类型(DI:dependency injection)
- Spring中属性注入的几种方式以及复杂属性的注入详解
- Spring通过@Value注解注入属性的几种方式
- SSH与SSM学习之Spring08——Spring属性注入之复杂类型注入
- 02_Spring3.2_属性类型构造注入
- Spring 注入 转换String类型值