Spring(4)--注解开发

前面说了,使用xml文件开发。有没有更简便的方法呢?
就是使用注解开发,原理一样,不过简化开发流程。坏处就是耦合性增加了

在Spring常用的注解有几种:

  • @Required
  • @Autowired
  • @Primary
  • @Value
  • @Primary
  • @PostConstruct
  • @PreDestroy

一、使用的前置条件

首先,需要maven的文件结构配置如下,才能使用注解。

1.1需要导入相关xmls约束和context:annotation-config/支持

<?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
        https://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/context
        https://www.springframework.org/schema/context/spring-context.xsd">

    <context:annotation-config/>

</beans>

1.2 aop支持

在Spring4.0以后,需要导入aop的包

1.3 扫描包

指定要扫描的包

<context:component-scan base-package="类的路径">

二、@Autowired

2.1 自动导入的功能

通过bean中id、name的值,找到class文件中对应属性。

autowired对应xml中4中情况,

但是autowired无需写以下4种情况,而由系统自动识别。

Mode Explanation
no 无操作
byName 会在上下文中查找,找到和自己对象setter函数后那么一致的name值,然后赋值
byType 会在上下文中查找,找到和自己对象setter函数后那么一致的类型,然后赋值
constructor 根据构造器名字查找

实际上autowired的配置方法如下:

package com.pojo;

import org.springframework.beans.factory.annotation.Autowired;

public class Hello {
    @Autowired(required = false)
    private Cat cat;
    private  Dog dog;
    private String str;

    public String getStr() {
        return str;
    }
    public Cat getCat() {
        return cat;
    }
    public void setCat(Cat cat) {
        this.cat = cat;
    }
    public Dog getDog() {
        return dog;
    }
    @Autowired
    public void setDog(Dog dog) {
        this.dog = dog;
    }
}

对应xml文件内的

<bean id="hello" class="com.pojo.Hello">
   <property name="dog" value="狗"/>
</bean>

2.2 @Qualifier

配合@Autowired使用,在自动装配环境比较复杂的时候,可以自己强制指定唯一的bean对象
使用情况:

  • 无法通过name查找
  • 无法通过类型查找
  • 无法通过构造器找到
<bean id="hello" class="com.pojo.Hello">
   <property name="dog11" value="狗"/>
   <property name="dog22" value="狗"/>
</bean>

对应

@Autowired
@Qualifier(value="dog22")
private  Dog dog;

2.3 @Resource

功能与@Autowired一模一样,用于自动装配
区别:

@Autowired @Resource
通过ByName的方式实现,找不到就报错 默认ByName的方式实现,找不到在通过ByType方式实现,都找不到才报错!

三、@Component

用于加载class文件,简写了

先在xml文件中添加如下代码:

<context:component-scan base-package="com.pojo">
<context:annotation-config/>

再在com.pojo包下的class文件中添加@Component,然后在对应的属性中,使用@value赋值,就完成了加载

等价于:===

<bean id="hello" class="com.pojo.Hello">
   <property name="dog11" value="狗"/>
   <property name="dog22" value="狗"/>
</bean>

其实,之后的Spring演化出几个功能
@configuation
@service
@controller
@view

四、@Value

赋值语句

posted @ 2020-04-10 14:42  code906  阅读(198)  评论(0)    收藏  举报