一、基本属性注入
//实体的bean类
public class User {
private Long id;
private String name = "无名氏";
private boolean gender; // 性别
private Set<String> addressSet; // Set集合
private Set numberSet; // Set集合(Integer型)
private List<String> addressList; // List
private String[] addressArray;
private Map<String, String> addressMap; // Map
private Properties properties;
public User() {
}
public User(Long id, String name) {
this.id = id;
this.name = name;
}
}
<!-- 通过属性注入(setter方法) -->
<bean name="user" class="pde.ams.user.h_beanproperty.User">
<property name="id" value="1"></property>
<property name="name" value="张三"></property>
<property name="gender" value="false"></property>
</bean>
<!-- 通过构造方法注入 -->
<bean name="user2" class="pde.ams.user.h_beanproperty.User">
<constructor-arg value="2"></constructor-arg>
<constructor-arg value="李四"></constructor-arg>
</bean>
<!-- 测试属性的注入,Spring可以自动转换类型 -->
<bean name="user3" class="pde.ams.user.h_beanproperty.User">
<property name="id" value="1"></property>
<property name="name">
<null />
</property>
<property name="gender" value="true"></property>
<!-- Set集合(String型) -->
<property name="addressSet">
<set>
<value>三里屯东路</value>
<value>三里屯科贸园</value>
</set>
</property>
<!-- Set集合(Integer型) 如果指定强类型,如Set<Integer>,则配置时可以不指定type,Spring能自动转换。 如果没有指定类型,默认当成String处理。这时指定明确的指定了类型,Spring才可以进行转换 -->
<property name="numberSet">
<set>
<value type="java.lang.Integer">10</value>
<value type="java.lang.Integer">20</value>
<value type="java.lang.Integer">30</value>
</set>
</property>
<!-- List集合 -->
<property name="addressList">
<list>
<value>三里屯3</value>
<value>三里屯2</value>
<value>三里屯1</value>
</list>
</property>
<!-- 数组,与List集合的配置一样 -->
<property name="addressArray">
<list>
<value>三里屯东路1</value>
<value>三里屯东路2</value>
<value>三里屯东路3</value>
</list>
</property>
<!-- Map集合 -->
<property name="addressMap">
<map>
<entry key="地址1" value="三里屯东路1"></entry>
<entry key="地址2" value="三里屯东路2"></entry>
</map>
</property>
<!-- Properties集合 -->
<property name="properties">
<props>
<prop key="pageSize">20</prop>
<prop key="maxFileSize">1000K</prop>
</props>
</property>
</bean>
<!-- 配置dao,如果这个bean只是用于抽取出的多个bean的公共配置,则加上abstract="true", 这时就不需要写class属性。 -->
<bean id="baseDao" abstract="true">
<property name="dataSource" value="myDataSource"></property>
</bean>
<!-- 在其他bean中,可以指定parent属性,表示要从哪个父bean继承过来一些公共的配置 -->
<bean id="myUserDao" parent="baseDao"
class="pde.ams.user.h_beanproperty.UserDao">
</bean>
<bean id="myRoleDao" parent="baseDao"
class="pde.ams.user.h_beanproperty.RoleDao">
</bean>
二、依赖的注入
public class UserDao {
private String dataSource; // 数据源,应是DataSource类型,这里只是模拟一下
public void saveUser(Object user) {
System.out.println("UserDao.saveUser()");
}
public String getDataSource() {
return dataSource;
}
public void setDataSource(String dataSource) {
this.dataSource = dataSource;
}
// ...
}
public class UserService {
private UserDao userDao;
public UserDao getUserDao() {
return userDao;
}
public void setUserDao(UserDao userDao) {
this.userDao = userDao;
}
// ...
}
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"
xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd">
<bean id="userDao" class="pde.ams.user.i_property_ref.UserDao">
<property name="dataSource" value="dataSource1"></property>
</bean>
<!-- 配置UserService,需要依赖UserDao,使用ref属性指定 -->
<bean id="userService" class="pde.ams.user.i_property_ref.UserService">
<property name="userDao" ref="userDao"></property>
</bean>
<!-- 可以在property元素下使用子元素bean声明一个匿名的bean,只是给当前的属性设置使用。 这时不需要指定id或是name属性,指定了也是无效的。 -->
<bean id="userService2" class="cn.itcast.spring.i_beanproperty_ref.UserService">
<property name="userDao">
<bean class="cn.itcast.spring.i_beanproperty_ref.UserDao">
<property name="dataSource" value="dataSource2"></property>
</bean>
</property>
</bean>s
</beans>
三、注解方式注入
@Repository("userDao")
@Scope("prototype")
public class UserDao {
private String dataSource; // 数据源,应是DataSource类型,这里只是模拟一下
public void saveUser(Object user) {
System.out.println("UserDao.saveUser()");
}
}
@Service
public class UserService {
@Resource
private UserDao userDao;
public UserDao getUserDao() {
return userDao;
}
public void setUserDao(UserDao userDao) {
this.userDao = userDao;
}
// ...
}
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd ">
<!-- 设置为自动扫描与装配置bean,base-package是指定要扫描哪个包,可以使用逗号隔开的多个包名 -->
<context:component-scan base-package="cn.itcast.spring.j_beanproperty_annonation"></context:component-scan>