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");
    }

  • 相关阅读:
    ojdbc14.jar
    Redis
    ftl转成word
    Swagger
    SpringBoot
    条件注解
    Spring SpringMVC MyBatis
    Spring介绍
    Django_mysql表查询
    Django01
  • 原文地址:https://www.cnblogs.com/deng-cc/p/8906158.html
Copyright © 2011-2022 走看看