Spring的bean管理(xml方式)
1. Bean实例化的方式
Spring内部是通过配置文件(xml)创建对象的,bean实例化也就是对象的创建。在bean实例化的方式中,最重要的就是使用类的无参构造来创建。如果在原来的User类中增加了一个有参构造,那么运行测试代码就会报错,错误信息显示没有找到默认的构造函数,也就是无参构造函数。
2. Bean标签常用属性
(1)id:不能包含特殊符号,根据id值得到配置对象;
(2)class:创建对象所在类的全路径;
(3)name:功能与id属性一样,但是可以包含特殊符号,目前几乎不用;
(4)scope:
- sington:单例,scope默认值,只创建一次对象;
- prototype:多例;
- request:创建对象并放到request域中;
- session:创建对象并放到session域中;
- globalSession:创建对象并放到globalSession域中;
1 import org.junit.Test; 2 import org.springframework.context.ApplicationContext; 3 import org.springframework.context.support.ClassPathXmlApplicationContext; 4 5 public class TestIOC { 6 @Test 7 public void testUser() { 8 ApplicationContext context = new ClassPathXmlApplicationContext("bean.xml"); 9 User user1 = (User) context.getBean("user"); 10 User user2 = (User) context.getBean("user"); 11 System.out.println(user1); 12 System.out.println(user2); 13 } 14 }
3. 属性注入
(1)概念:创建对象时,为类中属性设置属性值;
(2)属性注入的方式(Spring框架只支持前两种):
- set方法注入
- 有参构造注入
- 接口注入
1 public class PropertyDemo1 {
2 private String username;
3 public PropertyDemo1(String username) {
4 this.username = username;
5 }
6 }
<bean id="demo1" class="cn.itcast.property.PropertyDemo1"> <constructor-arg name="username" value="Shawn">constructor-arg> bean>
1 public class PropertyDemo2 {
2 private String username;
3 public void setUsername(String username) {
4 this.username = username;
5 }
6 }
<bean id="demo2" class="cn.itcast.property.PropertyDemo2">
<property name="username" value="Kevin">property>
bean>
beans>
4. 注入对象类型属性
(1)创建service类和dao类
1 public class UserService {
2 // 定义dao属性
3 private UserDao userDao;
4 // 生成set方法
5 public void setUserDao(UserDao userDao) {
6 this.userDao = userDao;
7 }
8 public void fun() {
9 System.out.println("service");
10 userDao.fun();
11 }
12 }
1 public class UserDao {
2 public void fun() {
3 System.out.println("dao");
4 }
5 }
(2)测试方法
1 import org.junit.Test;
2 import org.springframework.context.ApplicationContext;
3 import org.springframework.context.support.ClassPathXmlApplicationContext;
4
5 public class TestIOC {
6
7 @Test
8 public void testUser() {
9 ApplicationContext context = new ClassPathXmlApplicationContext("bean.xml");
10 UserService userService = (UserService) context.getBean("userService");
11 userService.fun();
12 }
13 }
(3)配置文件
1 xml version="1.0" encoding="UTF-8"?> 2 <beans xmlns="http://www.springframework.org/schema/beans" 3 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 4 xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"> 5 6 7 8 9 10 <bean id="userDao" class="cn.itcast.ioc.UserDao">bean> 11 <bean id="userService" class="cn.itcast.ioc.UserService"> 12 13 15 <property name="userDao" ref="userDao">property> 16 bean> 17 beans>
(4)运行结果