一、Bean实例化的三种方式
1、使用类的无参构造创建(重点)
<bean id="user" class="类的全路径"></bean>
如果类没有无参构造则报异常
2、使用静态工厂创建
(1)在工厂类中创建静态方法返回类对象
public class UserFactory{
public static User getUser(){
return new User();
}
}
(2)在Spring配置文件中创建对象
<bean id="user" class="工厂类的全路径" factory-method="getUser"></bean>
3、使用实例工厂创建
(1)创建不是静态的方法返回类对象
public class UserFactory{
public User getUser(){
return new User();
}
}
(2)
<bean id="userFactory" class="工厂类的全路径"></bean>
<bean id="user" factory-bean="userFactory" factory-method="getUser"></bean>
二、bean标签常用的属性
id属性:起名称,可以任意命名,不能用特殊符号,根据id值可以得到配置对象
class属性:创建对象所在类的全路径
name属性:功能和id属性一样,可以使用特殊符号
scope属性:
值:singleton:单例的(默认值)
prototype:多例的
request:Spring创建一个对象把它放在request域中
session:Spring创建一个对象把它放在session域中
globalSession:应用在porlet环境中,如果没有porlet环境,那么相当于session
三、属性注入
第一种:使用set方法注入
public class User{
private String name;
public void setName(String name){
this.name=name;
}
}
第二种:使用有参构造注入
public class User{
private String name;
User(String name){
this.name=name;
}
}
第三种:接口注入
public interface UserDao{
public void deleteUser();
}
public UserDaoImp implements UserDao{
private String name;
public void deleteUser(String name){
this.name=name;
...
}
}
在Spring中只支持前两种注入方式
1、set方法注入配置(重点)
<bean id="user" class="类的全路径">
<property name="属性名" value="属性值"></property>
</bean>
2、使用有参构造注入
<bean id="user" class="类的全路径">
<constructor-arg name="属性名" value="属性值"></constructor-arg>
</bean>
3、注入对象类型的属性(以在service中注入dao为例)
(1)在service中把dao作为属性
(2)生成dao类型属性的set方法
(3)<.bean id="userDao" class="dao的全路径"></bean>
<bean id="userService" class="service的全路径">
<property name="属性名" ref="userDao"></property>
</bean>
4、p名称空间注入
在约束上加入:<bean
xmlns:p="http://www.springframework.org/schema/p"
>
<bean id="user" class="类的全路径" p:属性名="属性值"></bean>
5、复杂属性注入
注入数组类型:
<bean id="user" class="类的全路径">
<property name="属性名" >
<list>
<value>属性值</value>
<value>属性值</value>
</list>
</property>
</bean>
注入list类型
<bean id="user" class="类的全路径">
<property name="属性名" >
<list>
<value>属性值</value>
<value>属性值</value>
</list>
</property>
</bean>
注入map类型
<bean id="user" class="类的全路径">
<property name="属性名" >
<map>
<entry key="键" value="值"></entry>
<entry key="键" value="值"></entry>
</map>
</property>
</bean>
注入properties类型
<bean id="user" class="类的全路径">
<property name="属性名" >
<props>
<prop key="键">值</prop>
<prop key="键">值</prop>
</props>
</property>
</bean>
四、IOC和DI的区别
(1)ioc:控制反转,把对象交给spring配置
(2)di:依赖注入:向类里面的属性设置值
(3)关系:依赖注入不能单独存在,需要在ioc的基础上完成操作