Spring学习——IOC(2)
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">
<!-- 使用set函数注入 -->
<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 <!-- ioc example --> 6 <!-- <bean id="user" class="cn.itcast.ioc.User" scope = "prototype"></bean> --> 7 8 <!-- 注入对象类型属性 --> 9 <!-- 配置service和dao对象 --> 10 <bean id="userDao" class="cn.itcast.ioc.UserDao"></bean> 11 <bean id="userService" class="cn.itcast.ioc.UserService"> 12 <!-- 在service中注入dao对象 --> 13 <!-- name:service类里面属性名称 14 ref:dao对象bean标签中的id值 --> 15 <property name="userDao" ref="userDao"></property> 16 </bean> 17 </beans>
(4)运行结果


浙公网安备 33010602011771号