zoukankan      html  css  js  c++  java
  • JavaSpring【四、Bean管理注解实现】

    前面讲的Bean相关配置全部是使用xml配置文件或实现接口来实现的,接下来将比较常用的用法,使用注解实现bean的注入和管理

    内容包括

    • ClassPath扫描与组件管理
    • 类的自动检测与注册bean
    • context:annotation-config
    • @Component、@Repository、@Service、@Controller
    • @AutoWired、@Required
    • @Qualifier
    • @Configuration、@Bean
    • @ImportResource("")、@Value
    • @Resource

    ClassPath扫描与组件管理

    从spring3.0开始可以使用java注解来定义bean,而非xml,如@Configuration、@Bean、@Import、@DependsOn
    @Conponent是一个通用注解,可用于任何Bean
    @Repository DAO层(持久层)注解
    @Service Service层(服务层)注解
    @Controller MVC控制层注解
    注册在类上的注解,可以被spring自动检测并注册到ApplicationContext中,注册在成员变量或方法上的注解可以被自动装载

    类的自动检测

    1、以下语句需要在springxml中配置,即可使用注解
    context:annotation-config
    context:component-scan(一般配置此配置,配置检测路径,会包含annotation-config)

    2、使用过滤器进行自定义扫描
    默认情况下,类被自动发信并注册bean的条件是:使用@Component、@Repository、@Service、@Controller注解或使用@Component注解的自定义注解
    可使用过滤器修改扫描规则,如用某字符替换某注解,context:include-filter、context:exclude-filter、ues-default-filter(禁用自动发现与注册)

    filter类型(type)

    • annotation 注解
    • assignable 类
    • aspectj
    • regex 正则表达式
    • custom

    Demo
    1、修改xml文件

    2、在需要注册的类上做注解(这里注解只能自动注册类,省去了xml配置,但不能自动装载,还是需要通过ApplicationContext获取)
    service中的dao类,因为有构造,可以自动装载,若无构造,需使用autowired


    3、测试运行

    @AutoWired、@Required——自动装载bean

    AutoWired可以注解成员变量,使其自动装载(不用使用构造)
    当装载List时,会装载所有List泛型类型的类,若想使其有序,可使用@Order注解所有泛型类型的实现类,用1,2,3标记

    若注解必须找到实现类,则可使用@Autowired(required = true) 或@Required(set方法注解)

    @Qualifier——缩小范围

    定义扫描的实现类名称,即使有其他实现类,也可以只装配该类

    Qualifier——适用于成员变量,构造,多参方法
    Resource——适用于成员变量,单参setter

    @Bean基于Java的容器注解

    使用在xml中配置bean标签的方式可以将类注册到ioc容器中;使用@Configuration注解+@Bean注解可以实现同样的效果

    @ImportResource("")、@Value——资源引用

    如jdbc的配置引入,可在Configuration文件上引入资源,然后对成员变量进行Value注解,读取资源文件中的key对于的值,再使用@Bean注册
    如@ImportResource("classpath:/com/shane/spring/properties-config.xml")、@Value("${jdbc.url}")、@Value("${jdbc.username}")、@Value("${jdbc.password}")

    @Resource、@PostConstruct、@PreDestory

    @Resource使用与@Autowired差不多,有以下区别
    1、@Autowired与@Resource都可以用来装配bean. 都可以写在字段上,或写在setter方法上。
    2、@Autowired默认按类型装配(这个注解是属业spring的),默认情况下必须要求依赖对象必须存在,如果要允许null 值,可以设置它的required属性为false
    3、@Resource(这个注解属于J2EE的),默认安照名称进行装配,名称可以通过name属性进行指定,
    如果没有指定name属性,当注解写在字段上时,默认取字段名进行按照名称查找,如果注解写在setter方法上默认取属性名进行装配。 当找不到与名称匹配的bean时才按照类型进行装配。但是需要注意的是,如果name属性一旦指定,就只会按照名称进行装配

    @Inject——需要引入包,等效于Autowired,与@Named配合使用

  • 相关阅读:
    Found class xxx.xxx.xxx, but interface was expected
    String的length()和getBytes().length
    springboot shutdown(停机)
    关于Java代码简化的小技巧
    数据库的简单查询
    数据库TSQL语句
    环境搭建及wamp空密码修改
    js windows对象
    JS函数的其他用法【备于取用】
    js递归
  • 原文地址:https://www.cnblogs.com/shanelau/p/6829861.html
Copyright © 2011-2022 走看看