zoukankan      html  css  js  c++  java
  • [07] 使用注解完成IOC配置


    1、扫描配置

    之前使用的Spring的Bean管理都是通过xml的配置文件来操作的,在Spring3.0之后已经引入了注解形式,Spring可以在指定路径下进行扫描,寻找标注了@Component、@Service、@Controller、@Repository注解的类,并将其纳入到Spring容器中进行管理。

    如果采用注解方式,需要首先在配置文件中指明扫描的包,如下配置:
    <context:component-scan base-package="dulk.learn.spring"></context:component-scan>  

    base-package配置为需要扫描的包(包含其子包),配置后,Spring会查找base-package下配置了注解的Java类,并加载到容器中。

    2、使用注解

    2.1 组件注解

    上个标题中我们提到了四种注解,可以看到注解很明显地进行了分层的标志,这也是Spring推荐三层架构形式的一种体现。来看看这四个注解:
    • @Service - 标注业务层组件
    • @Controller - 标注控制层组件(如Struts中的Action)
    • @Repository - 标注数据访问组件,即DAO组件
    • @Component - 泛指组件,当组件不好归类时,即可以选择使用该注解进行标注

    如下两者是相同的:
    @Component(value = "boy")
    public class Boy {
        ...
    }
    <bean id="boy" class="dulk.learn.spring.Boy"></bean>

    可以看到@Component中包含了value值,这个值对应的就是xml配置方式中Bean的id,这个值如果省略不写的话,会默认为首字母小写的当前类类名。

    另外,上面四种注解实际上在功能上没有什么区别,名称的不同主要是用来进行分类标记,增强代码的可读性。

    2.2 组件属性注解

    注:在属性上添加注解完成注入的方式,是可以省略属性的setter方法的

    对于基本类型的属性,使用@Value注解:
    @Value(value = "小明")
    private String name;

    如果是Bean组件属性的注入,则使用@Resource注解,这里的name即BeanId:
    @Resource(name = "dog")
    private Dog dog;

    当然,对于自动注入,也是有注解可用的,即@Autowired注解,该注解默认是byType类型,而@Resource则是byName,两者的区别还是有的,这里就不再详细展开了。

    2.3 初始化和销毁方法注解

    <bean id="boy" init-method="init" destroy-method="destroy" class="dulk.learn.spring.Boy"></bean>

    对于Bean的初始化和销毁方法,即原来xml配置文件中Bean的“init-method”和"destroy-method"属性,也是可以分别通过@PostConstruct@PreDestroy注解来替代,顺带一提,这两个注解不是Spring注解,而是JDK中的注解:
    @PostConstruct
    private void init() {
        System.out.println("Boy init");
    }
    
    @PreDestroy
    private void destroy() {
        System.out.println("Boy destroy");
    }

  • 相关阅读:
    BZOJ3752 : Hack
    XIV Open Cup named after E.V. Pankratiev. GP of SPb
    XIII Open Cup named after E.V. Pankratiev. GP of Ukraine
    BZOJ2087 : [Poi2010]Sheep
    BZOJ2080 : [Poi2010]Railway
    BZOJ2082 : [Poi2010]Divine divisor
    Moscow Pre-Finals Workshop 2016. National Taiwan U Selection
    XIII Open Cup named after E.V. Pankratiev. GP of Asia and South Caucasus
    XIII Open Cup named after E.V. Pankratiev. GP of Azov Sea
    XIII Open Cup named after E.V. Pankratiev. GP of SPb
  • 原文地址:https://www.cnblogs.com/deng-cc/p/8906158.html
Copyright © 2011-2022 走看看