spring的bean管理(xml方式)
Bean实例化的三种方式
Bean实例化的方式
1.在spring里面通过配置文件创建对象
2.bean实例化三种方式实现
第一种 使用类的无参构造创建
<bean id="" class="" ></bean> 默认是无参构造
类里面没有无参的构造器,出现异常
No default constructor found
第二种 使用静态工厂创建
1)创建静态的方法,返回类对象
public class BeanFactory(){
public static Bean2 getBean2(){
return new Bean();
}
}
配置文件
<bean id="bean" class="路径" factory-method=“getBean2”></bean>
第三种使用实例工厂创建
1)创建不是静态的方法,返回类对象
public class BeanFactory(){
public Bean3 getBean3(){
return new Bean3();
}
}
配置文件
先创建工厂对象
<bean id="BeanFactory" class="路径"></bean>
<bean id="bean2" factory-bean="BeanFactory" factory-method=“getBean3”></bean>
Bean标签属性的介绍
1) id 属性 起名称 id属性值名称任意命名
id 属性值 不能包含特殊符号
根据 id值得到配置对象
2) class 属性 创建对象所在类的全路径
3) name属性 功能和id属性功能一样 id属性值不能包含特殊符号
但是在name属性值里面可以有包含特殊符号。
4) scope 属性 Bean的作用范围
singleton 默认值 单例的
scope=“singleton”
ioc.User@1be3a66
ioc.User@1be3a66
prototype 多例的
ioc.User@1be3a66
ioc.User@dbnenii45
request web项目中 spring 创建一个Bean的对象 将对象存入到request域中
session web项目中 spring创建一个Bean的对象 将对象存入到session域中
globalSession web项目中 应用在Porlet环境 如果没有Prolet环境那么globalSession相当于session
Bean属性注入
1.创建对象时候,向类里面属性设置值
2.属性注入方式的介绍(三种方式)
1)使用set方法注入
<bean id="book" class="类全路径" >
《!-注入属性值
name属性值 类里面定义的属性名称
value属性 设置具体的值
-》
<property name="bookname" value="java编程原理' ></property>
</bean>
2)使用有参数构造注入
配置文件
<bean id="" class="" >
有参的构造
name有参构造中的属性
<constructor-arg name="username" value="小王"></constructor-arg >
</bean>
3)使用接口注入
3在spring框架里面 支持前俩种方式
1)set方法注入(**)
2)有参数构造注入
注入对象类型属性(重点)
public class UserSercive{
public void add(){
在sercive里面 得到dao类对象,才能调用dao里面的方法
UserDao dao=new UserDao();
dao.add();
}
}
修改以后
public class UserSercive{
1.定义一个dao类型属性
2.生成set方法
private UserDao userDao;
public void setUserService(UserDao userDao){
this.userDao=userDao;
}
public void add(){
userDao.add();
}
}
1创建service类和dao类
(1)在service得到dao对象
2.具体实现过程
(1)在service里面把dao作为类型属性
(2)生成dao类型属性的set方法
3.配置文件中的注入
《!---注入对象属性配置--》
《1.配置service和dao对象--》
《dao注入》
<bean id="userDao" class="类全路径"></bean>
<bean id="userService" class="类全路径" >
《!-注入dao类
name属性值 service类里面属性名称
现在不能写value属性 刚才是字符串 现在是对象
写ref属性 dao配置bean标签中id值
-》
<property name="userDao" ref="userDao' ></property>
</bean>
执行 public voidtestUser(){
1.加载spring配置文件 根据创建对象
ApplicationContext context=
new ClassPathXmlApplicationContext("bean1.xml");
2.得到配置创建的对象
UserService userService=(UserService) context.getBean("userService");
userService.add();
}
P名称空间注入
xmlns=”http://www.springframework.org/schema/beans”
xmlns:xsi=”http://www.w3.org/2001/XMLSchema-instance”
xmlns:p=”http://www.springframework.org/schema/p” //P的命名空间
xsi:schemaLocation=”
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd“>
实现类
public classPerson{
private String pname;
public void setPname(String panme){
this.panme=panme;
}
public void test(){
System.out.println();
}
}
<!--P名称空间注入-->
<bean id="person" class="全路径" p:panme="kkk"></bean>
复杂的类型的属性
1.数组
2.list集合
3map集合
4.properties类型
<bean id="person" class="全路径" p:panme="kkk">
<数组类型>
<property name="arrs" >
<list>
<value>1</value>
</list>
</property>
<list>
<property name="lis" >
<list>
<value>1</value>
<value>2</value>
</list>
</property>
<map>
<property name="map" >
<map>
<entry key="" value=""></entry>
</map>
</property>
<properties>
<property name="properties" >
<props>
<prop key="driverclass" >com.mysql.jdbc.Driver</prop>
<prop key="userName" >root</prop>
</lprops>
</property>
</bean>
IOC与DI的区别
(1)IOC:控制反转,把对象交给spring进行配置
(2)DI: 依赖注入:向类里面的属性中设置值
(3)关系:“
依赖注入不能单独存在,需要在IOC基础之上来完成操作。