Spring的bean管理(注解方式)
1. 示例准备
(1)导入jar包
(2)创建类和方法
1 public class User { 2 public void fun() { 3 System.out.println("function"); 4 } 5 }
(3)创建spring配置文件并引入约束
在beans约束的基础上,引入context约束。
xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd"> beans>
(4)开启注解扫描
xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd"> <context:component-scan base-package="cn.itcast">context:component-scan> beans>
2. 创建对象
1 import org.springframework.stereotype.Component; 2 3 @Component(value = "user") 4 public class User { 5 public void fun() { 6 System.out.println("function"); 7 } 8 }
1 import org.junit.Test; 2 import org.springframework.context.ApplicationContext; 3 import org.springframework.context.support.ClassPathXmlApplicationContext; 4 5 public class TestAnno { 6 @Test 7 public void testUser() { 8 ApplicationContext context = new ClassPathXmlApplicationContext("bean.xml"); 9 User user = (User) context.getBean("user"); 10 System.out.println(user); 11 user.fun(); 12 } 13 }
(1)创建对象使用的四个注解
Spring中提供@Component的三个衍生注解(功能目前是一致的):
- @Controller:WEB层
- @Service:业务层
- @Repository:持久层
三个注解是为了让标注类本身的用途清晰,Spring在后续版本中会对其增强。
(2)Scope注解
3. 属性注入
1 import org.springframework.stereotype.Component; 2 3 @Component(value = "userDao") 4 public class UserDao { 5 public void fun() { 6 System.out.println("dao"); 7 } 8 }
(1)@Autowired
使用@Autowired注解进行对象自动注入,只根据类名(UserDao)查找,而不是注解中的value值(userDao)。
1 import org.springframework.beans.factory.annotation.Autowired; 2 import org.springframework.stereotype.Service; 3 4 @Service(value = "userService") 5 public class UserService { 6 @Autowired 7 private UserDao userDao; 8 public void fun() { 9 System.out.println("service"); 10 userDao.fun(); 11 } 12 }
(2)@Resource
name属性中的值为注入类(UserDao)上面的注解的value值(userDao),根据该name属性查找并注入对象。
1 @Resource(name = "userDao") 2 private UserDao userDao;
(4)测试方法
1 import org.junit.Test; 2 import org.springframework.context.ApplicationContext; 3 import org.springframework.context.support.ClassPathXmlApplicationContext; 4 5 public class TestAnno { 6 @Test 7 public void testService() { 8 ApplicationContext context = new ClassPathXmlApplicationContext("bean.xml"); 9 UserService userService = (UserService) context.getBean("userService"); 10 userService.fun(); 11 } 12 }