1 Spring注入类型
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.code.dao.impl.UserDaoImpl" >
</bean>
<bean id="userService" class="com.code.service.UserService">
<property name="userDao" ref="u"/><!-- 这里的ref表示参考id=u的那个bean -->
<!--或是下面的方式
<property name="userDao">
<ref bean="u"></ref>
</property> -->
</bean>
2Spring<bean>标签的id和name属性区别
id: 一个bean的唯一标识 , 命名格式必须符合XML ID属性的命名规范
name: 可以用特殊字符,并且一个bean可以用多个名称:name=“bean1,bean2,bean3” ,用逗号或者分号或者空格隔开。如果没有id,则name的第一个名称默认是id
name: 可以用特殊字符,并且一个bean可以用多个名称:name=“bean1,bean2,bean3” ,用逗号或者分号或者空格隔开。如果没有id,则name的第一个名称默认是id
3Spring<bean>简单属性的注入
<bean id="u" class="com.code.dao.impl.UserDAOImpl">
<property name="daoId" value="110"/>
<property name="daoString" value="220"></property>
</bean>
4<bean中的scope属性
singleton 单例 从spring容器中取出的对象都是一个对象
<bean id="userService" class="com.code
.service.UserService" autowire="byName" scope="singleton">
prototype 每次创建新的对象
<bean id="userService" class="com.code.service.UserService" autowire="byName" scope="prototype">
5 集合注入
package com.code.dao.impl;
import java.util.List;
import java.util.Map;
import java.util.Set;
import com.code.dao.UserDAO;
import com.code.model.User;
public class UserDAOImpl implements UserDAO {
private int daoId;
private String daoString;
private Set<String> sets;
private List<String> lists;
private Map<String, String> maps;
public int getDaoId() {
return daoId;
}
public void setDaoId(int daoId) {
this.daoId = daoId;
}
public String getDaoString() {
return daoString;
}
public void setDaoString(String daoString) {
this.daoString = daoString;
}
public Set<String> getSets() {
return sets;
}
public void setSets(Set<String> sets) {
this.sets = sets;
}
public List<String> getLists() {
return lists;
}
public void setLists(List<String> lists) {
this.lists = lists;
}
public Map<String, String> getMaps() {
return maps;
}
public void setMaps(Map<String, String> maps) {
this.maps = maps;
}
public void save(User user) {
//Hibernate
//JDBC
//XML
//NetWork
System.out.println("user saved!");
}
@Override
public String toString(){
return "=====daoId======> " + daoId;
}
}
<bean id="userDAO1" class="com.code.dao.impl.UserDAOImpl">
<property name="daoId" value="110"/>
<property name="daoString" value="220"></property>
<property name="lists">
<list>
<value>990</value>
<value>991</value>
<value>992</value>
<value>993</value>
</list>
</property>
<property name="maps">
<map>
<entry key="a" value="880"/>
<entry key="b" value="881"/>
<entry key="c" value="882"/>
<entry key="d" value="883"/>
</map>
</property>
</bean>
6 AutoWire 自动装配
<bean 属性中autowire
<bean id="userDAO" class="com.code
.dao.impl.UserDAOImpl">
<bean id="userService" class="com.code.service.UserService" autowirre="ByName"/>
当UserService中有UserDAO的对象为userDAO时,通过该属性autowirre="ByName"自动注入到对象userService中。
相应的autowirre="ByType"在spring容器中查找类型为UserDAO的对象,如果超过一个对象,报错。
7 生命周期 LifeCycle
lazy-init
ApplicationContext实现的默认行为就是在启动时将所有singleton bean提前进行实例化(也就是依赖注入)。提前实例化意味着作为初始化过程的一部分,ApplicationContext实例会创建并配置所有的singleton bean。通常情况下这是件好事,因为这样在配置中的任何错误就会即刻被发现(否则的话可能要花几个小时甚至几天)。
<bean id="testBean" class="com.code.TestBean"> 该bean默认的设置为:
<bean id="testBean" class="com.code.TestBean" lazy-init="false"> lazy-init="false" 立退加载, 表示spring启动时,立刻进行实例化。
(lazy-init 设置只对scop属性为singleton的bean起作用)