`

Spring--Java注解注入2

阅读更多

一、基于@Component注解的配置

Spring 2.5 中除了提供 @Component 注释外,还定义了几个拥有特殊语义的注释,它们分别是:@Repository、@Service 和 @Controller。
在目前的 Spring 版本中,这 3 个注释和 @Component 是等效的,但是从注释类的命名上,很容易看出这 3 个注释分别和持久层、业务层和控制层(Web 层)相对应。
虽然目前这3 个注释和 @Component 相比没有什么新意,但 Spring 将在以后的版本中为它们添加特殊的功能。所以,如果 Web 应用程序采用了经典的三层分层结构的话,最好在持久层、业务层和控制层分别采用上述注解对分层中的类进行注释。

1、@controller 控制器(注入服务)

2、@service 服务(注入dao)

3、@repository dao(实现dao访问)

4、@component (把普通pojo实例化到spring容器中,相当于配置文件中的<bean id="" class=""/>)

@component用法如下:

[java] view plaincopy在CODE上查看代码片派生到我的代码片
 
  1. @Component("userDao")  
  2. public class UserDaoImp implements UserDao{  
  3.   
  4.     @Override  
  5.     public void add(User user) {  
  6.         System.out.println(user.getName());    
  7.         System.out.println(user.getSex());   
  8.         System.out.println(user.getAge());   
  9.     }  
  10.   
  11. }  

  在类上使用@Component注解,表示该类定义为Spring管理Bean,使用默认value(可选)属性表示Bean标识符。

相当于:

 

[html] view plaincopy在CODE上查看代码片派生到我的代码片
 
  1. <bean id="userDao" class="com.mucfc.dao.UserDao"/>  

@Component,@Service,@Controller,@Repository注解的类,并把这些类纳入进spring容器中管理。 

 

下面写这个是引入component的扫描组件 

[html] view plaincopy在CODE上查看代码片派生到我的代码片
 
  1. <!-- 配置的bean所在包的位置 -->    
  2. lt;context:component-scan base-package="com.mucfc" />  

其中base-package为需要扫描的包(含所有子包) 

@Component泛指组件,当组件不好归类的时候,我们可以使用这个注解进行标注。

本文工程免费下载

二、使用实例

User.java:用@Repository注解

 

[java] view plaincopy在CODE上查看代码片派生到我的代码片
 
  1. package com.mucfc.model;  
  2. import org.springframework.context.annotation.Scope;  
  3. import org.springframework.stereotype.Repository;  
  4.   
  5. @Repository("user")  
  6. @Scope("prototype")  
  7. //@Repository用于标注数据访问组件,即DAO组件  
  8. //@Scope("prototype")让其每次返回不同的实例,默认是单例  
  9. public class User {  
  10.     private String name;  
  11.     private String sex;  
  12.     public String getName() {  
  13.         return name;  
  14.     }  
  15.     public void setName(String name) {  
  16.         this.name = name;  
  17.     }  
  18.     public String getSex() {  
  19.         return sex;  
  20.     }  
  21.     public void setSex(String sex) {  
  22.         this.sex = sex;  
  23.     }  
  24.     public int getAge() {  
  25.         return age;  
  26.     }  
  27.     public void setAge(int age) {  
  28.         this.age = age;  
  29.     }  
  30.     private int age;  
  31.       
  32.   
  33. }  

UserDao.java

[java] view plaincopy在CODE上查看代码片派生到我的代码片
 
  1. package com.mucfc.dao;  
  2.   
  3. import com.mucfc.model.User;  
  4.   
  5. public interface UserDao {  
  6.     public void add(User user);  
  7. }  

UserDaoImp.java:用@Controller注解

[java] view plaincopy在CODE上查看代码片派生到我的代码片
 
  1. package com.mucfc.daoimp;  
  2.   
  3. import org.springframework.stereotype.Controller;  
  4.   
  5. import com.mucfc.dao.UserDao;  
  6. import com.mucfc.model.User;  
  7.   
  8. @Controller("userDao")  
  9. //@Controller用于标注控制层组件  
  10. public class UserDaoImp implements UserDao{  
  11.   
  12.     @Override  
  13.     public void add(User user) {  
  14.         System.out.println(user.getName());    
  15.         System.out.println(user.getSex());   
  16.         System.out.println(user.getAge());   
  17.     }  
  18.   
  19. }  

UserService.java:用@Service注解

[java] view plaincopy在CODE上查看代码片派生到我的代码片
 
  1. package com.mucfc.service;  
  2. import javax.annotation.Resource;  
  3.   
  4. import org.springframework.stereotype.Service;  
  5.   
  6. import com.mucfc.dao.UserDao;  
  7. import com.mucfc.model.User;  
  8.   
  9. @Service("userService")  
  10. //@Service用于标注业务层组件  
  11. public class UserService {  
  12.      //setter注入接口、面向接口编程    
  13.     private UserDao userdao ;    
  14.     public void add(User user){    
  15.         userdao.add(user) ;    
  16.     }    
  17.     public UserDao getUserdao() {    
  18.         return userdao;    
  19.     }    
  20.     //注解    
  21.     @Resource(name="userDao")    
  22.     public void setUserdao(UserDao userdao) {    
  23.         this.userdao = userdao;    
  24.     }    
  25. }  


beans.xml'

 

 

[html] view plaincopy在CODE上查看代码片派生到我的代码片
 
  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" xmlns:p="http://www.springframework.org/schema/p"  
  4.     xmlns:context="http://www.springframework.org/schema/context"  
  5.     xsi:schemaLocation="http://www.springframework.org/schema/beans    
  6.                 http://www.springframework.org/schema/beans/spring-beans-3.0.xsd    
  7.         http://www.springframework.org/schema/context    
  8.         http://www.springframework.org/schema/context/spring-context-3.0.xsd">  
  9.      <!-- 配置的bean所在包的位置 -->    
  10.     <context:component-scan base-package="com.mucfc" />  
  11. </beans>  


测试下:

 

 

[java] view plaincopy在CODE上查看代码片派生到我的代码片
 
  1. package com.mucfc.anno;  
  2.   
  3. import org.springframework.context.ApplicationContext;  
  4. import org.springframework.context.support.ClassPathXmlApplicationContext;  
  5.   
  6. import com.mucfc.model.User;  
  7. import com.mucfc.service.UserService;  
  8.   
  9.   
  10. public class Test {  
  11.   
  12.     public static void main(String[] args) {  
  13.         ApplicationContext applicationContext = new ClassPathXmlApplicationContext("beans.xml");  
  14.         UserService service=(UserService)applicationContext.getBean("userService");  
  15.         User user1 = (User) applicationContext.getBean("user");   
  16.         User user2 = (User) applicationContext.getBean("user");  
  17.         user1.setName("小明");  
  18.         user1.setSex("男");  
  19.         user1.setAge(22);  
  20.           
  21.         user2.setName("小红");  
  22.         user2.setSex("女");  
  23.         user2.setAge(18);  
  24.           
  25.         service.add(user1);  
  26.         service.add(user2);  
  27.     }  
  28.   
  29. }  

结果:

 

 

当在组件类中使用了特定的注解之后,还需要在Spring的配置文件中声明 <context:component-scan>:

  • base-package属性指定一个需要扫描的基类包,Spring容器将会扫描整个基类包里及其子包中的所有类
  • 当需要扫描多个包时,可以使用逗号分隔
  • 如果仅希望扫描特定的类而非基包下的所有类,可使用resource-pattern属性过滤特定的类,实例:   
  • <context:include-filter>子节点表示要包含的目标类
  • <context:exclude-filter>子节点表示要排除在外的目标类
  • <context:component-scan>下可以拥有若干个<context:include-filter>和<context:exclude-filter>子节点
  • <context:include-filter>和<context:exclude-filter>子节点支持多种类型的过滤表

三、更多的配置元数据

 

1、@Lazy:定义Bean将延迟初始化,使用方式如下:

 

java代码:
[java] view plaincopy在CODE上查看代码片派生到我的代码片
 
  1. @Component("component")  
  2. @Lazy(true)  
  3. public class TestCompoment {  
  4. ……  
  5. }  

    使用@Lazy注解指定Bean需要延迟初始化。

 

2、@DependsOn:定义Bean初始化及销毁时的顺序,使用方式如下:

 

java代码:
[java] view plaincopy在CODE上查看代码片派生到我的代码片
 
  1. @Component("component")  
  2. @DependsOn({"managedBean"})  
  3. public class TestCompoment {  
  4. ……  
  5. }  

3、@Scope:定义Bean作用域,默认单例,使用方式如下:

 

java代码:
[java] view plaincopy在CODE上查看代码片派生到我的代码片
 
  1. @Component("component")  
  2. @Scope("singleton")  
  3. public class TestCompoment {  
  4. ……  
  5. }  

 

4、@Qualifier:指定限定描述符,对应于基于XML配置中的<qualifier>标签,使用方式如下:

 

java代码:
[java] view plaincopy在CODE上查看代码片派生到我的代码片
 
  1. @Component("component")  
  2. @Qualifier("component")  
  3. public class TestCompoment {  
  4. ……  
  5. }  

    可以使用复杂的扩展,如@Mysql等等。

 

 

5、@Primary:自动装配时当出现多个Bean候选者时,被注解为@Primary的Bean将作为首选者,否则将抛出异常,使用方式如下:

 

java代码:
[java] view plaincopy在CODE上查看代码片派生到我的代码片
 
  1. @Component("component")  
  2. @Primary  
  3. public class TestCompoment {  
  4. ……  
  5. }  
分享到:
评论

相关推荐

    spring-demo10-注解-IOC.zip

    总的来说,Spring的注解式依赖注入极大地简化了Java应用的配置,使得开发人员可以更专注于业务逻辑,而非繁琐的配置工作。通过研究这个示例,你可以更好地理解和掌握Spring框架的核心特性,提高你的开发效率。

    spring-mybatis-spring-1.3.2.tar.gz

    3. DAO实现:Spring将自动创建Mapper接口的代理对象,通过@Autowired注解注入到Service层,调用Mapper接口的方法执行SQL。 四、SpringMVC与Spring整合 1. DispatcherServlet配置:在web.xml中配置DispatcherServlet...

    spring-demo13-注解-@Value.zip

    在Spring框架中,`@Value`注解是一个非常实用的工具,它允许我们在bean的属性或者方法参数中直接注入配置属性值,极大地提高了代码的可读性和灵活性。本项目"spring-demo13-注解-@Value.zip"显然是一个关于如何使用`...

    spring-test-3.2.0.RELEASE.jar

    通过`@MockBean`注解,可以在Spring容器中注入一个Mock对象,而`@SpyBean`则可以创建一个部分模拟的Bean。同时,`when()`和`thenReturn()`等方法可以定义Mock对象的行为,实现精确的预期控制。 3. **Web应用测试:*...

    spring-framework-5.1.x-源碼解析详细注解

    《Spring Framework 5.1.x 源码解析详细注解》 Spring Framework作为Java开发中的核心框架,其设计理念和实现机制对理解企业级应用的构建至关重要。本资源提供了Spring 5.1.x版本的源码详细注解,旨在帮助开发者...

    spring-boot-starter-mybatis-spring-boot-1.0.2.zip

    在Java开发领域,Spring Boot以其简洁的配置和快速的启动特性,已经成为构建微服务应用的首选框架。而MyBatis作为一款强大的持久层框架,深受开发者喜爱,它提供了灵活的SQL映射功能,使得数据库操作变得更加简单。...

    spring.jar spring-webmvc-struts.jar spring-webmvc.jar

    标题中的"spring.jar"、"spring-webmvc-struts.jar"和"spring-webmvc.jar"都是Spring框架相关的Java库文件,通常以.jar结尾的文件是Java的归档文件,包含了类、资源和元数据,用于Java应用程序的运行。这些文件在...

    spring-cache.xsd+spring-encache.xsd

    Spring框架是一个广泛应用的Java企业级应用开发框架,它提供了多种功能,包括但不限于依赖注入、面向切面编程、数据访问以及缓存等。 XML Schema(XSD)是一种用于定义XML文档结构和数据类型的规范。在这里,...

    spring-mvc注解详情

    10. **@Autowired**:Spring的依赖注入注解,自动将Bean注入到需要它们的地方。可以配合@Qualifier使用,指定从Bean定义中选择哪一个。 11. **@Transactional**:用于标记一个方法或类为事务边界,Spring会自动管理...

    spring-context.xsd

    2. Spring中的DI实现:Spring通过XML配置、注解以及Java配置三种方式实现DI。`spring-context.xsd`主要涉及XML配置方式,它定义了Spring上下文中的元素和属性,如`&lt;bean&gt;`、`&lt;property&gt;`等,用于声明和配置Bean及其...

    spring-framework-5.0.2.RELEASE-dist.zip

    5.0版本增强了配置元数据支持,包括XML、Java注解以及基于Java的配置。 在数据访问层,Spring Framework 5.0.2.RELEASE改进了对JDBC、JPA、Hibernate等ORM框架的支持。它提供了更丰富的模板类,简化了数据库操作。...

    spring-framework-3.0.RELEASE

    2. **增强的类型安全的依赖注入**:通过使用JSR-330注解,如`@Inject`,Spring 3.0实现了类型安全的依赖注入,减少了运行时错误。 3. **支持Java配置**:除了XML配置外,Spring 3.0引入了Java配置,允许开发者使用...

    intellij-spring-assistant-1.0.4.zip

    在Java后端开发领域,Spring框架的应用已经深入人心,而作为一款强大的Java集成开发环境(IDE),IntelliJ IDEA自然也需要与之配套的工具来提升开发效率。Spring Assistant 1.0.4就是这样一个为IntelliJ IDEA量身...

    spring-framework-4.2.0.RELEASE官方完整包加官方文档

    在依赖注入方面,Spring 4.2.0.RELEASE进一步简化了配置,通过Java配置类和注解,使得代码更加简洁易读。@Configuration和@Bean注解是核心,它们定义了bean的创建方式。此外,@Autowired注解用于自动装配依赖,极大...

    spring-framework-4.3.5 所有JAR文件包

    它通过读取配置元数据(XML、Java注解或Groovy脚本)来初始化和管理对象。 3. **AOP**: - AOP允许开发者定义“方面”,这些方面封装了横切关注点,如日志记录、事务管理等。Spring AOP支持使用代理模式实现切面,...

    mybatis-spring-1.3.3.jar官方下载

    Spring 以其 IoC(Inversion of Control,控制反转)和 DI(Dependency Injection,依赖注入)为核心,极大地简化了 Java 应用的开发。 MyBatis-Spring 的主要功能包括: 1. **SqlSessionTemplate**:这是一个 ...

    spring-core3.2.5集合包

    - 使用注解进行依赖注入,简化代码。 - 通过 AOP 实现事务管理,确保数据一致性。 - 利用 SpEL 进行动态计算和属性设置。 - 利用 IoC 容器管理各种服务,提升代码可测试性。 总结,Spring Core 3.2.5 集合包是 ...

    spring-mybatis整合jar包

    - 使用@Autowired注解注入Mapper接口,然后在业务逻辑中调用方法执行SQL。 4. **jar包解析**:解压后的jar包可能包括Spring的核心库、MyBatis的核心库、以及它们的依赖库,如log4j、slf4j、cglib、asm等。每个库都...

    mybatis-spring-1.1.1-bundle

    (4)注入Mapper:在需要使用Mapper的Spring Bean中,通过@Autowired注解注入Mapper接口。 4. 事务管理 MyBatis-Spring允许使用Spring的声明式事务管理。只需在Spring配置文件中声明PlatformTransactionManager,...

    spring-demo-xuzhqii_java_

    综上所述,"spring-demo-xuzhqii_java_" 项目可能包含了 Spring 框架的基本使用,如依赖注入、注解驱动、MVC 结构等。对于初学者来说,这是一个很好的起点,可以从中学习到 Spring 如何管理和协调 Java 应用中的组件...

Global site tag (gtag.js) - Google Analytics