Bean管理注解实现

  • Classpath扫描与组件管理
  • 类的自动检测与注册Bean
  • 类的注解@Component、@Service等作用是将这个实例自动装配到Bean容器中管理
  • 而类似于@Autowired、@Required等注解则是将所代表的实例Bean1注册到需要这个实例的另一个Bean2中,在Bean2初始化时使其属性Bean1值不为null,他们并不能使Bean装配到Bean容器中。使用这些注解时,其代表的实例是要已经装配到Bean容器中的,否则会报错。
  • <context:component-scan >
    • 自动扫描类的注解:将使用注解的类注册到IOC容器中

      <context:component-scan base-package="com.jing.spring.annotation"></context:component-scan>
  • @Component(value="    ")
    • 是所有注解的父注解,用于不确定类是具体应该使用哪种类型注解时使用。可以代表任何一种类型注解。
  • @Scope
    • Bean的作用域
    • @Scope(value="singleton")
    • @Scope("value=prototype")
  • @Repository
    • 注解数据DAO层
  • @Service
    • 注解Service层
  • @Controller
  • @Required
    • 适用于Bean的setter方法,表示Bean初始化时,Bean的属性必须被填充。
  • @Autowired(!!!)
    • @Autowired注解只是将Bean注入到具体属性或参数中,它不具备将Bean装配到Bean容器中的功能。
    • 适用于Bean的setter方法,表示Bean初始化时,Bean的属性必须被填充。(功能同@Required)
      private BeanTest beanTest;
      
      @Autowired
      private void setBeanTest ( BeanTest beanTest){
      this.beanTest =beanTest;
      }
    • 适用于构造器
      class BeanAnnotation{
      private BeanTest beanTest; @Autowired
      public BeanTest ( BeanTest beanTest){
      this.beanTest =beanTest;
      }
      }
    • 适用于属性
      class BeanAnnotation{
      
          @Autowired
      private BeanTest beanTest; public BeanTest ( BeanTest beanTest){
      this.beanTest =beanTest;
      }
      }
    • 在使用@Autowired时,如果找不到合适的Bean将会报错。我们可以使用以下方法避免这个问题,代表这个Bean不是必要的
      class BeanAnnotation{
      
          @Autowired(required=false)
      private BeanTest beanTest; public BeanTest ( BeanTest beanTest){
      this.beanTest =beanTest;
      }
      }
    • 当使用@Autowired(required=true)时,代表这个Bean是必须已经装配到Bean容器中,每个类只可以在一个构造器上使用。
    • 当一个类中,有多个setter需要标记为必须装配时,可以使用@Required代替@Autowired(required=true)。
    • 注解常用的接口,比如BeanFactory、Application、ResourceLoader、MessageSource,用于在类中直接获取实例。
      public class TestAutowired{
      
           @Autowired
      private ApplicationContext application; public TestAutowired{
      application.getBean("");
      }
      }
    • 注解给需要该类型的数组,使其不为null,如List、Set
      public class TestAutowired{
      
          //AutowiredBeanI为接口,实现这个接口的类都将注入到list中
      @Autowired
      private List<AutowiredBeanI> list;
      }
    • 注解给需要该类型的Map,使其不为null
      public class TestAutowired{
      
          //AutowiredBeanI为接口,实现这个接口的类都将注入到map中
      @Autowired
      private Map<String,AutowiredBeanI> map;
      }
    • Next
  • @Qualifier
    • @Qualifier注解是将具体Bean注入到属性或参数中,它不具备将Bean装配到Bean容器中的功能。使用这个注解的前提是这个Bean已经装配到Bean容器中,否则会报错。
    • @Qualifier可以指定具体名称的Bean,将Bean注入到属性或参数中,如下代码:TestQualifierI接口有多个实现类,如果不通过@Qualifier指定具体Bean,这几个实现类的Bean将都会注入到List中;指定具体Bean名称后,只会注入指定的Bean。
      @Component(value = "qualifierEntry")
      public class QualifierEntry { @Autowired
      @Qualifier(value = "qualifierOne")
      private List<TestQualifierI> qualifierIS; public void print(){
      for (TestQualifierI qualifier:qualifierIS) {
      qualifier.say();
      }
      }
      }
    • 可以通过@Autowired和@Qualifier(value=" ")的方式指定Bean名字将Bean注入。但是这种方式一般不建议使用,可以使用JSR-250@Resource注解替代,这个注解是通过使用特定的名称来定义和识别特定的目标(这个匹配过程与Bean声明的类型无关)。
  • @Configuration、@Bean、@Scope
    • @Configuration标记类可以作为配置文档来使用,和配置文件产生关联
    • 在使用@Configuration标记的类中,使用@Qualifier(value="  ")时,@Qualifier不能够注入其他类的实例,只可以引用本类中使用@Bean装配的实例。
    • @Bean用于配置和初始化一个用于IOC容器管理的新实例,它可以用于标识具有特殊数据内容的实例,将这个实例存储在IOC中,方便读取。
    • @Bean标记的类默认为singleton,可以和@Scope搭配使用,标记改变类的作用域
    • @Bean只能应用于标记类的方法,这个类的作用是产生新的实例,并由@Bean标记交由IOC容器管理,和@Configuration注解一起使用。
      package com.jing.spring.annotation;
      
      import org.springframework.context.annotation.Bean;
      import org.springframework.context.annotation.Configuration; @Configuration
      public class Configure { @Bean(value = {"configure2","configure1"},initMethod = "init",destroyMethod = "destroy")
      public BeanConfigureI beanCon(){
      return new BeanConfigureImpl();
      }
      }
  • @ImportResource、@Value
    • @ImportResource加载本地资源文件:xml,使用@Value将properties中得变量赋值到Java属性中,配置使用

      <!--   spring-config.xml       -->
      <?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:property-placeholder location="classpath:/config.properties"></context:property-placeholder>
      </beans>
      #config.properties
      url:127.0.0.1
      name:jingguoliang
      package com.jing.spring.annotation;
      
      import org.springframework.beans.factory.annotation.Value;
      import org.springframework.context.annotation.Bean;
      import org.springframework.context.annotation.Configuration;
      import org.springframework.context.annotation.ImportResource; @Configuration
      @ImportResource(locations = {"classpath:spring-config.xml"})
      public class Configure { @Value(value = "url")
      private String url;
      @Value(value = "name")
      private String name; @Bean(value = {"configResource"})
      public ValueAndReImportResource getConfigResource(){
      ValueAndReImportResource valueAndReImportResource = new ValueAndReImportResource(url,name); return valueAndReImportResource;
      }
      }
    • Next

Spring 学习——Spring常用注解——@Component、@Scope、@Repository、@Service、@Controller、@Required、@Autowired、@Qualifier、@Configuration、@ImportResource、@Value的更多相关文章

  1. Java程序员常用的@Component、@Repository、@Controller、@Service系列【案例demo3】

    Java程序员常用的@Component.@Repository.@Controller.@Service系列[案例demo3]   很多程序员通过在类上使用@Repository.@Componen ...

  2. Spring学习之常用注解(转)

    使用注解来构造IoC容器 用注解来向Spring容器注册Bean.需要在applicationContext.xml中注册<context:component-scan base-package ...

  3. spring 以及 spring mvc 中常用注解整理

    spring 以及 spring mvc 中常用注解整理 @RequestMapping(映射路径) @Autowired(注入 bean 对象) 例如: @Autowired private Bas ...

  4. SpringAnnotation注解之@Component,@Repository,@Service,@Controller

    @Component:组件,表示此写上了此注解的bean,作为一个组件存在于容器中.这样的话别的地方就可以使用@Resource这个注解来把这个组件作为一个资源来使用了.初始化bean的名字为类名首字 ...

  5. Spring 和 SpringMVC 常用注解和配置(@Autowired、@Resource、@Component、@Repository、@Service、@Controller的区别)

    Spring 常用注解 总结内容 一.Spring部分 1.声明bean的注解 2.注入bean的注解 3.java配置类相关注解 4.切面(AOP)相关注解 5.事务注解 6.@Bean的属性支持 ...

  6. Spring中的常用注解

    Spring中的常用注解 1.@Controller 标识一个该类是Spring MVC controller处理器,用来创建处理http请求的对象.

  7. springmvc学习笔记(常用注解)

    springmvc学习笔记(常用注解) 1. @Controller @Controller注解用于表示一个类的实例是页面控制器(后面都将称为控制器). 使用@Controller注解定义的控制器有如 ...

  8. SpringMVC注解@Component、@Repository、@Service、@Controller区别

    SpringMVC中四个基本注解: @Component.@Repository   @Service.@Controller 看字面含义,很容易却别出其中三个: @Controller   控制层, ...

  9. Spring注解@Component、@Repository、@Service、@Controller @Resource、@Autowired、@Qualifier、@scope

    以下内容摘自部分网友的,并加上了自己的理解 @Service用于标注业务层组件(我们通常定义的service层就用这个) @Controller用于标注控制层组件(如struts中的action.Sp ...

随机推荐

  1. git 语法

    $ git init  // 初始化一个Git仓库 会生成一个.git目录 $ git status   // 查看仓库的状态 $ git add .   // 将所有修改添加到暂存区 $git ad ...

  2. web前端 ajax请求报415/400错

    一.当使用jQuery 的ajax发送请求时 1.请求路劲没有出错并且不存在跨域,出现415错误 解决方法:在ajax请求中加上contentType: 'application/json', $.a ...

  3. 《大话设计模式》c++实现 外观模式

    外观模式:为子系统中的一组接口提供一个一致的界面,此模式定义了一个高层接口,这个接口使得这一子系统更加容易使用. 外观模式在什么时候使用呢? 分为三个阶段: (1)首先,在设计初期阶段,应该要有意识的 ...

  4. Spring Security实现RBAC权限管理

    Spring Security实现RBAC权限管理 一.简介 在企业应用中,认证和授权是非常重要的一部分内容,业界最出名的两个框架就是大名鼎鼎的 Shiro和Spring Security.由于Spr ...

  5. Nginx技术研究系列3-OpenResty安装配置

    上两篇中介绍了: Ngnix技术研究系列1-通过应用场景看Nginx的反向代理 Ngnix技术研究系列2-基于Redis实现动态路由 发现,应该加一篇OpenResty的安装部署说明,方便大家按图索骥 ...

  6. codeforces 984B Minesweeper

    题意: 给出一个矩阵,如果一个格子是数字,那么与这个格子相邻的格子中有炸弹的数量必须等于这个格子中的数字: 如果一个格子是空地,那么这个格子的所有相邻的格子中就不能有炸弹. 判断这个矩阵是否合法. 思 ...

  7. Java8函数式编程探秘

    引子 将行为作为数据传递 怎样在一行代码里同时计算一个列表的和.最大值.最小值.平均值.元素个数.奇偶分组.指数.排序呢? 答案是思维反转!将行为作为数据传递. 文艺青年的代码如下所示: public ...

  8. 设计模式之Template(模板)(转)

    Template定义: 定义一个操作中算法的骨架,将一些步骤的执行延迟到其子类中. 其实Java的抽象类本来就是Template模式,因此使用很普遍.而且很容易理解和使用,我们直接以示例开始: pub ...

  9. super和this关键字

    super关键字: this关键字: 栈内存和堆内存和方法区内存分析: 其中,new出来的即对象都在堆内存区: main方法先进栈: 方法区中 [[ super_class ]]是编译器生成,代码表现 ...

  10. go语言,golang学习笔记3 用命令下载框架报错问题解决 设置环境变量

    go语言,golang学习笔记3 用命令下载框架报错问题解决 设置环境变量 下载安装:go get github.com/astaxie/beego 首页 - beego: 简约 & 强大并存 ...