SpringDI:依赖注入(需要在ioc基础上完成)
setter注入
构造器注入
Spring的自动装配,ByName,BType,consract
延迟加载Lazy-init:配置bean的加载方式,若为true,则只有使用该对象时spring容器才会创建该对象,若为false时,一旦配置文件被读取,则Spring容器会将所有bean都实例化。
①Bean作用域(scope):
singleton(默认配置)每一个bean对应一个实例(无论获取多少个)(默认配置)
prototype:每一次获取bean都是一个新建的实例(一般web项目中控制对象应该配置为prototype)
request:在web项目中,针对每一次请求都创建一个bean的实例
session:在web项目中,针对每一次会话都创建bean实例
global session:在web项目中,针对所有客户端的请求始终只创建一个bean实例/22Bean的生命周期:
②init-method在对象初始化之后指定的方法
destroy-method:在对象被销毁前执行指定方法
③id&name:id通常指代bean唯一标识,不允许重复;name也可以与id具备相同功能(根据name获取bean),但是name可以同时支持多个值(使用,隔开),除第一个name值,之后的值都是该bean的别名,如果一个bean的配置中既存在id也存在name时,此时name会作为别名
四、Bean实例化三种方式
1、无参构造器(用法详情Spring实例之IOC)
若类没有默认构造器会出现异常:BeanCreationException:No default constructor found
<bean id="hello" class="com.my.spring.SpringHelloWorld"></bean>
2、使用静态工厂(少用)
//静态工厂写法
public staic Bean1 getBean1(){ return new Bean1();}
//创建
<bean id="hello" class="com.my.spring.BeanFactory" factor-method="getBean1"></bean>
3、使用实例工厂(少用)
//静态工厂写法
public Bean1 getBean1(){ return new Bean2();}
//创建
<bean id="beanFactory" class="com.my.spring.BeanFactory" "></bean>
<bean id="hello" factory-bean="beanFactory" factor-method="getBean1"></bean>
六、属性注入方式
1、Setter注入(重点)
<bean id="demo1" class = "com.my.property.PropertyDemo1">
<!--注入属性值;name是类里面定义的属性名称,value是设置具体的值-->
<property name="username" value="gougou"></property>
</bean>
2、构造器注入
<bean id="demo1" class = "com.my.property.PropertyDemo1">
<!--使用有参构造;参数名称,值-->
<constructor-arg name="username" value="gougou"></construtor-arg>
</bean>
· 3、接口注入(spring不支持)
七、注入对象
1、实现过程:
①:写dao类和service类
②:service类里面定义dao类型属性,生成set方法
③:service类方法里面调用dao类的方法
public class UserService{
private UserDao userdao;
public void setUserDao(UserDao userDao){
this.userDao = userDao;
}
public void add(){
userDao.add();
}
}
④:在配置文件完成注入过程(setter注入方式)
<!--配置dao对象-->
<bean id="userDao" class="com.my.UserDao"></bean>
<!--配置service对象-->
<bean id="userService" class="com.my.UserService">
<!--注入dao对象,不要写value属性;ref写dao配置bean标签中id值 -->
<property name="userDao" ref="userDao"></property>
</bean>
八、注入复杂类型(array,map,list,properties)
在配置文件里面实现
<bean>
<!--arry-->
<property name="arras">
<list>
<value>小王</value>
<value>小李</value>
</list>
</property>
<!--list-->
<property name="list">
<list>
<value>小王</value>
<value>小李</value>
</list>
</property>
<!--map-->
<property name="map">
<map>
<enty key="no1" value="王"></enty>
<enty key="no2" value="李"></enty>
</map>
</property>
<!--properties-->
<property name="properties">
<props>
<prop key="driverclass">com.mysql.jdbc.Driver</prop>
<prop key="username" >root</prop>
</props>
</property>
</bean>