使用注解开发

平时开发中,配置文件其实并没有写这么多,更多是使用注解开发。

在Spring4之后如果想使用注解开发,必须导入AOP的包。

需要导入context注解 ,增加注解支持

  1. 导入约束
    xmlns:context="http://www.springframework.org/schema/context"
    
    http://www.springframework.org/schema/context
    https://www.springframework.org/schema/context/spring-context.xsd
    
  2. 配置注解的支持
    <context:annotation-config/>
    
  3. 包扫描,可自动扫面具体包下的类并进行标签装配
    <!--指定要扫描的包,这个包下的注解就会生效-->
    <context:component-scan base-package="com.zhaox"/>
    
  4. 整合
    <?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:component-scan base-package="com.zhaox"/>
       <context:annotation-config/>
    
    </beans> 
    

使用注解开发:

  1. bean
    @Component:
    组件,放在pojo类上,说明这个类被spring管理了,等价于<bean id = "user class="com.zhaox.pojo.user"/>
    
  2. 属性注入
    @Value("zhaox")
    相当于<property name = "name" value""zhaox/>
    为bean注入属性
    基本放在set方法上,或者属性上
    注意,基本只有简单类型可以注入,如果是复杂类型,还是推荐配置文件注入
    
  3. 衍生的注解

    @Component有一些衍生注解,在web开发中,我们会按照三层架构分层

  • dao【@Repository】
  • service【@Service】
  • controller【@Controller】

    四个注解功能都是一样的,都是将类注册到Spring中装配(成为bean)

  1. 自动装配

    @autowire:
    实现自动装配
    直接在属性上用,也可以在set方式上使用(甚至可以不用编写set方法)
    这个标签内的属性required可以为true或false
    如果为false说明这个对象可以为空,否则不允许为空
    
    @Qualifier:
    如果自动装配环境复杂,比如上面猫狗例子中有多个猫狗,通过id无法分清谁是谁,这时我们可以通过这个标签
    指腚唯一的bean对象
    
    @Resource:
    同样实现自动装配
    这是java的原生注解,几乎兼容了spring的自动装配注解
    此注解会先去通过id查找注入
    如果id无对应,则可以通过类型注入(类型必须唯一)
    此注解内也有属性name,可以给name赋值,这样就可以解决类型不唯一,名字也都不匹配的问题。
    
  2. 作用域
    @Scope("singleton")
    @Scope("prototype")
    可以设置某个类的作用域
    
  3. 小结

    xml与注解相比:

  • xml更加万能,适用于任何场景,维护方便
  • 注解不是自己的类无法使用,维护相对复杂

    最佳:xml负责bean,注解只负责注入属性

1. 基于java实现xml配置Spring

可以不使用Spring的XMl配置了,全权交给java来做

在spring4之后,它变成了核心功能

首先是xml配置文件的变化:

在首行加入@Configuration,代表这是一个配置类(配置类的本质也是一个@Component)

@Configuration
public class ZhaoxConfig {
    @Bean
    //方法名字就是 bean 标签中的id,方法的返回值就是
    public User user(){
        return new User();
    }
}

然后是实体类的变化:

依旧是在类上加入Component,依旧是使用Value注册值

@Component
public class User {
    @Value("zhaox")
    private String name;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    @Override
    public String toString() {
        return "User{" +
                "name='" + name + '\'' +
                '}';
    }
}

最后是测试类的变化:

ApplicationContext context = new AnnotationConfigApplicationContext(ZhaoxConfig.class);

我们不再需要CPX获取上下文环境了,取而代之的是AnnotationConfigApplicationContext来获取环境


醉后不知天在水,满船清梦压星河