【Spring】的【Bean】管理(注解)【四个相同功能的注解】
【Spring】的【Bean】管理(注解)【四个相同功能的注解】
- 注解:代码里面特殊的标记,使用注解也可以完成一些相关的功能。
- 注解写法:@注解名称(属性名称=属性值)
- 注解使用在类、方法、属性上面
(注解可以替代配置文件,并非完全替代):
1.创建类,创建方法
1 public class User { 2 public void add(){ 3 System.out.println("add-----------"); 4 } 5 }
2.创建spring配置文件,引入约束
1 <beans xmlns="http://www.springframework.org/schema/beans" 2 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 3 xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation=" 4 http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd 5 http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd"> <!-- bean definitions here --> 6 </beans>
3.配置开启注解扫描
1 <!-- 2 开启注解扫描功能 3 (1)到包里面扫描类、方法、属性上面是否有注解 4 --> 5 <context:component-scan base-package="com.anno"></context:component-scan> 6 7 8 9 <!-- 只会扫描属性上面的注解,所以我们不用 --> 10 <context:annotation-config></context:annotation-config>
一、 使用注解创建对象
在创建对象的类上面使用注解实现
1 @Component(value="user") //<bean id="" class=""> 2 public class User { 3 public void add(){ 4 System.out.println("add-----------"); 5 } 6 }
写测试代码
1 @Test 2 public void testAno(){ 3 ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml"); 4 User user = (User)applicationContext.getBean("user"); 5 user.add(); 6 }
创建对象有四个注解,下面还有三个:
Spring中提供了@Component的三个衍生注解:(功能目前来说是一致的,都是用来创建对象) |
|
@Controller |
Web层 |
@Service |
业务层 |
@Repository |
持久层 |
这三个注解是为了让标注类本身用途清晰,spring在后续的版本中会对其增强。 |
创建对象单实例还是多实例 在类上面添加注解@scope
1 @Component(value="user") //<bean id="" class=""> 2 @Scope(value="prototype") 3 public class User { 4 public void add(){ 5 System.out.println("add-----------"); 6 } 7 }
二、使用注解注入属性
第一种注解(很少用):@Autowired
需求:创建service类,创建dao类,在service得到dao对象
1 @Component(value="userdao") 2 public class UserDao { 3 public void add(){ 4 System.out.println("dao--------------add"); 5 } 6 }
@Service(value="userservice") public class UserService { //得到dao对象 //1定义dao类型属性 //在dao属性上面使用注解完成对象注入 autowired代表自动装配/注入,注意这里的private UserDao userdao自动注入是根据类名注入的,和UserDao里面的注入对象没有任何关系 @Autowired private UserDao userdao; //使用注解方式不需要set方法 public void add(){ System.out.println("service------------add"); userdao.add(); } }
1 @Test 2 public void testService(){ 3 ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml"); 4 UserService userService = (UserService)applicationContext.getBean("userservice"); 5 userService.add(); 6 }
第二种注解(经常用,因为能够准确注入)@Resource:
1 @Service(value="userservice") 2 public class UserService { 3 //得到dao对象 4 //1定义dao类型属性 5 //2在dao属性上面使用注解完成对象注入 autowired代表自动装配 6 //@Autowired 7 //name属性值写注解创建的dao对象value值 8 @Resource(name="userdao") 9 private UserDao userdao; 10 //使用注解方式不需要set方法 11 public void add(){ 12 System.out.println("service------------add"); 13 userdao.add(); 14 } 15 }
三、xml和注解方式混合使用
1、创建对象的操作使用配置文件方式实现;
1 public class BookDao { 2 public void book(){ 3 System.out.println("book dao-----------"); 4 } 5 }
1 public class OrderDao { 2 public void order(){ 3 System.out.println("order dao-----------"); 4 } 5 }
1 public class BookService { 2 //得到bookdao和orderdao对象 3 @Resource(name="bookDao") 4 private BookDao bookdao; 5 @Resource(name="orderDao") 6 private OrderDao orderdao; 7 8 public void add(){ 9 System.out.println("bookservice"); 10 bookdao.book(); 11 orderdao.order(); 12 } 13 }
配置文件
1 <!-- 配置对象 --> 2 <bean id="bookService" class="com.xmlanno.BookService"></bean> 3 <bean id="bookDao" class="com.xmlanno.BookDao"></bean> 4 <bean id="orderDao" class="com.xmlanno.OrderDao"></bean>
2、注入属性的操作使用注解实现
1 //得到bookdao和orderdao对象 2 @Resource(name="bookDao") 3 private BookDao bookdao; 4 @Resource(name="orderDao") 5 private OrderDao orderdao;
请留下你的足迹...