zoukankan      html  css  js  c++  java
  • Spring Bean装配(下)——注解

    @Repository,@Service,@Controller这三个注解是基于component定义的注解

    component-scan:组件扫描

    base-package:扫描这个下的所有类

    <context:component-scan>和<context:annotation-config>的区别:

    前者可以扫描基于类的注解,但是后者只能在完成bean的注册之后去处理bean中的方法或者是成员变量的注解,在使用前者的时候已经包含了后者的全部功能,通常在开发的过程使用的是前者

    或者使用@Component的自定义注解:我们可以自定义注解,用@Component去注解我们的自定义注解,那么我们的自定义注解也可以被用于注解类,这样也能被Spring容器自动发现

     type类型有以下几种:

    1.service会有一个属性name,用service去注解这个类SimpleMovieLister的时候,可以去显示的指定这个类在注册到bean容器中或者叫IOC容器中,它所对应的id也就是它的名称相当于xml配置文件中的id,如果我们显示指定了,如果我们显示指定了,那么就会用我们显示指定的名称。

    2.没有显示指定它的id或名称是什么,它就会根据BeanNameGenerator来自动生成它的id,通常的生成规则是以类名为基础,并把类名的第一个字母小写作为字符串的id

    3.自定义bean命名策略

    怎么使用自定义bean命名策略的实现类?

    name-generator去指定我们自己的命名策略实现

    Spring Bean装配之Bean的定义及作用域的注解实现

    如何使用自定义的scope策略?

    scope-resolver去指定我们自己的实现类,基于这种方式的去扫描的所有类,它的scope都是由我们自定义的scope策略去实现的

    用到什么样的标签可以去参考下spring的官方文档,里面会有相关的说明

    @Required不常用的注解

    @Autowired字面理解自动的去进行装配

     Autowired相比于Required,它的用途范围更广,既可以用在set方法上,也可以用在成员变量或者构造器上,常用的注解

     

    众所周知的解析依赖性接口:Spring自己的解析依赖性接口,主要是解析Spring的xml文件或者是解析注解等等。

    我们可以在当前类里面去声明对ApplicationContext的引用,然后使用@Autowired注解,这个时候我们就可以在当前类中得到IOC的上下文信息,然后使用这个上下文信息

    数组:是set或者list

    所有特定类型的bean:当set中设置MovieCatalog这种类型的时候,当前的ApplicationContext中,所有是set泛型中声明类型的这种bean或者是它的子类,都可以被Autowired注解,然后把这些bean的实例放到当前的集合movieCatalogs当中去,当然也可以用于Map

    key:所有的bean的id

    value:bean的对象

    例子

     

    1.用在成员变量的时候

    @Qualifier("main")

    如果有多个MovieCatalog的时候,我们可以通过Qualifier来指定使用main,也就是bean id为main的这个MovieCatalog实现类或者是子类

    2.用在方法参数中

    用MovieCatalog对应的bean id为main的这个bean的实例

    通过什么方式定义自己的qualifier注解?

    1.定义自己的注解的时候用qualifier来注解我们自定义的注解,那么我们定义的注解就具备了qualifier注解的相应功能。

    2.使用xml配置文件的方式

    @Qualifier注解能够缩小范围,指定到具体的bean

    @component注解可以用在任何注解类上面

    两种方式的效果都是一样的,都会向SpringIoc容器中添加一个对象,左边的方式是使用编码加注解的方式,右边是使用基于xml的配置方式

     

    @Bean(name="myFoo")

    自己指定bean的name

     如果使用@Bean注解,在没有指定name的情况下,那么这个bean的name是方法的名称

    如何使用@ImportResource和@Value注解进行资源文件读取

    使用配置文件的方式

    使用注解的方式

    从资源文件中去加载资源文件的配置并应用到bean的创建中

    如何创建DriverManagerDataSource的bean对象?

    用@value这个注解从资源文件中取出它的key,赋值给当前类的成员变量

    再使用@Bean这个注解去创建DriverManagerDataSource,同时把url,username,password传入DriverManagerDataSource构造器

    例子

    这里所得到的hashCode对应这个bean即stringStore所在类的hashCode

     这里所得到的hashCode是对象的hashCode

     

     

    如果没有指定Resource的name,那么默认就是根据setter方法去得出,如果@Resource注解是在成员变量上,那就是根据成员变量的名称得出

    这里ApplicationContext可以理解为IOC容器

    当同一种类型的bean在IOC容器中有多个的时候,想使用特定的那个bean,这个时候就可以使用@named注解

    @named的两种使用方式

    1.@named与@Component是等效的,也可以用来注解在类上,如以上代码所示

    2.@named用来指定某一个名称的bean,如以下代码所示

  • 相关阅读:
    Nacos微服务部署(超详细)基于Centos7
    Centos7配置Mysql5.7数据库
    django搭建web (一)
    NetFPGA-1G-CML Demo --- reference_router_nf1_cml
    Linux下Java通用安装方法
    NetFPGA-1G-CML Demo --- openflow_switch
    原型设计(结对第一次)
    第二次作业——个人项目实战
    游戏
    python学习笔记-问题
  • 原文地址:https://www.cnblogs.com/songsongblue/p/9741864.html
Copyright © 2011-2022 走看看