***手工装配(XML方式)***
一、通过setter方法注入:
<bean id="userDao1" class="cn.itcast.h_di_simple.UserDaoImpl">
<property name="jdbcUrl" value="jdbc:mysql:///test"></property>
<property name="driverClass" value="com.mysql.jdbc.Driver"></property>
<property name="username" value="root"></property>
<property name="password" value="root"></property>
</bean>
二、通过构造器注入:
<bean id="userDao2" class="cn.itcast.h_di_simple.UserDaoImpl">
<constructor-arg value="jdbc:mysql:///test22"></constructor-arg>
<constructor-arg value="com.mysql.jdbc.Driver22"></constructor-arg>
<constructor-arg value="root_name22"></constructor-arg>
<constructor-arg value="root_password22"></constructor-arg>
</bean>
或是:
<bean id="userDao3" class="cn.itcast.h_di_simple.UserDaoImpl">
<constructor-arg index="0" value="jdbc:mysql:///test22"></constructor-arg>
<constructor-arg index="1" value="com.mysql.jdbc.Driver22"></constructor-arg>
<constructor-arg index="2" value="root_name22"></constructor-arg>
<constructor-arg index="3" value="root_password22"></constructor-arg>
</bean>
**注入普通属性(基本类型或是String型)**
<bean id="user" class="cn.itcast.j_di_simple.User">
<property name="name" value="张三"></property>
<property name="age" value="18"></property>
<property name="gender" value="true"></property>
</bean>
**注入null值**
<property name="comment">
<null />
</property>
**注入依赖的对象**
方式一:
<bean id="userDao" class="cn.itcast.j_di_bean.UserDaoImpl"/>
<bean id="userService" class="cn.itcast.j_di_bean.UserServiceImpl">
<property name="userDao" ref="userDao"></property>
</bean>
方式二:使用内部bean,因为没有id或name,所以该bean不能被其他bean使用
<bean id="userService2" class="cn.itcast.j_di_bean.UserServiceImpl">
<property name="userDao">
<bean id="userDao2" class="cn.itcast.j_di_bean.UserDaoImpl" />
</property>
</bean>
**注入集合属性**
一、创建类:
public class User {
private String name;
// 集合属性要定义为接口类型
// 集合类型可以不初始化,因为会注入一个新的集合对象
// 集合最好指定强类型,以便Spring转型,如果未指定,就会是String型的值
// 如果没有指定强类型,也可以在配置时指定:
// <value type="java.lang.Integer">10</value>
private Set<String> addressSet = new HashSet<String>();
private Set<Integer> numberSet;
private List<String> addressList;
private String[] addressArray;
private Map<String, String> addressCodeMap;
private Properties userProperties;
public void printInfo() {
System.out.println("name = " + name);
System.out.println("addressSet = " + addressSet);
System.out.println("numberSet = " + numberSet);
System.out.println("addressList = " + addressList);
System.out.println("addressArray = " + Arrays.toString(addressArray));
System.out.println("addressCodeMap = " + addressCodeMap);
System.out.println("userProperties = " + userProperties);
}
// getter与setter略
}
二、配置:
<bean id="user" class="cn.itcast.k_di_collection.User">
<property name="name" value="张三"></property>
<property name="addressSet">
<set>
<value>上地东路27号</value>
<value>上地东路28号</value>
</set>
</property>
<property name="numberSet">
<set>
<value type="java.lang.Integer">1</value>
<value type="java.lang.Integer">2</value>
</set>
</property>
<property name="addressList" >
<list>
<value >上地东路27号</value>
<value>上地东路28号</value>
</list>
</property>
<property name="addressCodeMap">
<map>
<entry key="上地东路27号" value="100085" ></entry>
<entry key="软件园9号楼" value="100086"></entry>
</map>
</property>
<property name="userProperties">
<props>
<prop key="firstName" >hello</prop>
<prop key="lastName">world</prop>
</props>
</property>
</bean>
***手工装配(注解方式)***
**在类中使用——定义bean**
1、引入context命名空间。
2、在配置文件中添加context:component-scan标签。
<?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"
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">
<context:component-scan base-package="cn.com"></context:component-scan>
</beans>
@Service用于标注业务层组件、
@Controller用于标注控制层组件(如struts中的action)、
@Repository用于标注数据访问组件,即DAO组件。
而@Component泛指组件,当组件不好归类的时候,我们可以使用这个注解进行标注。
@Scope用于指定当前bean的作用域。
**在类中使用——注入**
这需要通过@Resource注解实现,@Resource注解可以标注在字段或属性的setter方法上,但它默认按名称装配。名称可以通过@Resource的name属性指定,如果没有指定name属性,当注解标注在字段上,即默认取字段的名称作为bean名称寻找依赖对象,当注解标注在属性的setter方法上,即默认取属性名作为bean名称寻找依赖对象。
@Resource默认按名称装配,当找不到与名称匹配的bean才会按类型装配。如果没有指定name属性,并且按照默认的名称找不到依赖对象时, @Resource注解会回退到按类型装配。但一旦指定了name属性,就只能按名称装配了。
@Resource(name="personDao")
private PersonDao personDao;;//用于字段上
@Resource(name="personDao")
public void setPersonDao(PersonDao personDao) {//用于属性的set方法上
this.personDao = personDao;
}
后一种相当于xml配置文件中的
<property name=“personDao" ref="personDao" />