SPR6: Spring5注解开发

6.1 概览

6.1.1 简介

​ Spring4之后,要使用注解开发,则必须导入aop的jar包。值得一提的是,注解开发只用用于一些简单的开发,一旦涉及复杂操作,还是需要使用配置文件,例如一个实体类中,有其他实体类作为属性。

6.1.2 配置文件

<?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/>
        <context:component-scan base-package="com.yun"/>        
</beans>

提示: 这个地法的支持标签——scan 下的package必须指定你的所有注解类所在的包,否则注解不能生效。

6.2 bean、属性与作用域

User.java:

package com.yun.pojo;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Component;

@Component
@Scope("singleton")
public class User {
    @Value("李四哥")
    private String name;

    @Value("45")
    private int age;

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

测试接口:

package com.yun;

import com.yun.pojo.User;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class MyTest {
    @Test
    public void UserTest(){
        ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
        User user = context.getBean("user", User.class);
        System.out.println(user);
    }
}

输出结果:

User{name='李四哥', age=45}

提示: @Component 注解的作用是将该实体类注册到容器中,也就是相当于 bean标签 的作用。@Value() 注解的作用是为为属性进行 值注入@Scop 注解的作用是为该实体类注册的bean指定作用域,备选值依旧是 singeleton、prototype、request、session、application、websocket 这些。

6.3 注解衍生

6.3.1 简介

​ 6.2的内容都是在pojo层,而按照MVC三层架构来说,还应该有dao、service、controle等内容,而所谓的衍生注解,则是针对这三层的。

6.3.2 例子

dao层:

package com.yun.dao;

import org.springframework.stereotype.Repository;

@Repository
public class UserDao {
    @Override
    public String toString(){
        return "这是UserDao类";
    }
}

Service层:

package com.yun.service;

import org.springframework.stereotype.Service;

@Service
public class UserService {
    @Override
    public String toString(){
        return "这是UserService类";
    }
}

Controller层:

package com.yun.control;

import org.springframework.stereotype.Controller;

@Controller
public class loginServlet {
    @Override
    public String toString(){
        return "这是loginServlet类";
    }
}

测试接口:

package com.yun;

import com.yun.control.loginServlet;
import com.yun.dao.UserDao;
import com.yun.pojo.User;
import com.yun.service.UserService;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class MyTest {
    @Test
    public void UserTest(){
        ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");

        UserDao userDao = context.getBean("userDao", UserDao.class);
        loginServlet loginServlet = context.getBean("loginServlet", loginServlet.class);
        UserService userService = context.getBean("userService", UserService.class);

        System.out.println(userDao);
        System.out.println(loginServlet);
        System.out.println(userService);

    }
}

提示: 值得一提的是,使用注解进行开发,在调用容器中的bean时,名字必须使用 类名首字母小写 的形式,否则便会报错。例如:UserDao,getBean(“userDao”,UserDao.class)。

结果:

这是UserDao类
这是loginServlet类
这是UserService类

写在最后,使用注解仅适用于简单的案例,复杂案例还是需要配置文件,而大家在开发中,往往使用的是,在配置文件中进行bean配置,使用注解负责属性注入。

6.4 使用Java代替xml配置文件

6.4.1 简介
Spring的配置文件,除了可以使用 applicationContext.xml 来实现,还可以通过 Java配置类 实现。

6.4.2 使用

ApplicationConfig.java:

package com.yun.config;

import com.yun.pojo.User;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class ApplicationConfig {

    @Bean
    public User getUser(){
        return new User();
    }
}

提示: 此处的 @Configuration 注解跟 @Component 注解一样,都是一种标试,只是它的作用是,告诉Spring我是你的配置文件。

User.java:

package com.yun.pojo;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;

@Component
public class User {
    @Value("王二嫂")
    private String name;

    @Value("2022568435")
    private int ID;

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

测试接口:

package com.yun;

import com.yun.config.ApplicationConfig;
import com.yun.pojo.User;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;

public class MyTest {
    @Test
    public void test(){
        ApplicationContext context = new AnnotationConfigApplicationContext(ApplicationConfig.class);

        User user = context.getBean("getUser", User.class);
        System.out.println(user);
    }   
}

提示: 此处的getBean的参数值,是java配置文件中的方法名。并且,由于使用的配置方法已经有所不同,因此在容器的获取上面,也有着差异,例如实例化的对象已经有所改变。

测试结果:

User{name='王二嫂', ID=2022568435}

总结: Java配置Spring,与Xml配置Spring的作用是一样的,因此,xml能够实现的内容,java配置文件依旧可以实现,例如多个配置文件之间的插入 @import注解,又或者说扫描注解等。但是具体的使用,则需要在SpringBoot了解。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值