Spring5----复习笔记3

今天来介绍一下Spring5基于注解的开发。

简单来说就是主要利用注解而不是配置文件进行对象创建:

Spring针对bean管理中创建对象提供注解:

(1) @Component     表示一个带注释的类是一个“组件”,成为Spring管理的Bean。当使用基于注解的配置和类路径扫描时,这些类被视为自动检测的候选对象。同时@Component还是一个元注解(注解的注解)。
(2) @Service       组合注解(组合了@Component注解),应用在service层(业务逻辑层)
(3) @Controller    组合注解(组合了@Component注解),应用在MVC层(控制层),DispatcherServlet会自动扫描注解了此注解的类,然后将web请求映射到注解了@RequestMapping的方法上。
(4) @Repository    组合注解(组合了@Component注解),应用在dao层(数据访问层)

上面4个注解功能相同,都是创建bean实例。

 

一、基于注解方式实现属性注入:

步骤:

(1)引入 AOP 依赖
(2)开启组件扫描
(3)创建类,在类上面创建对象注解
(4)  ApplicationContext context = new ClassPathXmlApplicationContext("bean1.xml");
     UserService userService = context.getBean("userService", UserService.class);  获取对象

我们首先要导入aop的包:

 接着在配置文件中开启组件扫描:
bean1.xml配置:

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

    <!--开启注解扫描-->
    <context:component-scan base-package="com.learn"> </context:component-scan>
    
</beans>

注解介绍:

基于注解方式实现属性注入
(1)@AutoWired  表示根据属性类型自动注入
 ① 把 service 和 dao对象创建,在 service 和 dao 类 添加创建对象的注解
 ② 在 service里面注入 dao对象,在 service 类 添加 dao类型属性,属性上面使用 @AutoWired(不需要添加set方法)
(
2)@Qualifier 根据属性名称进行注入 这个注解的使用要和 @AutoWired 在一起使用 @Autowired @Qualifier(value = "userDaoImpl") 根据名称进行注入 (对象所在类的类名 开头第一个字母小写)
(
3)@Resource 可以根据类型或名称注入 不推荐用
(
4)@Value 注入普通类型属性 @Value(value = "abc") private String name;

创建类,并在类上面添加注解:

Dao:

接口:

public interface UserDao {
    public void add();
}

接口实现类:

@Repository(value = "userDaoImpl")  //Dao注解 value是对象名称 不写的话默认是类名首字母小写
public class UserDaoImpl implements UserDao{
    @Override
    public void add() {
        System.out.println("Dao add......");
    }
}

Service:

//注解里面value属性值可以不写,默认是类名称,首字母小写
@Service            // 相当于 <bean id = "" class = "" />  id就是这里的value
public class UserService {

    @Value(value = "abc")
    private String name;

    //定义dao类型属性
    //不需要添加set方法
    //添加注入属性注解
    @Autowired
    @Qualifier(value = "userDaoImpl")
    private UserDao userDao;

    public void add() {
        System.out.println("service add......" + name);
        userDao.add();
    }

}

java程序:

@Test
    public void testService() {
        ApplicationContext context = new ClassPathXmlApplicationContext("bean1.xml");
        UserService userService = context.getBean("userService", UserService.class);

        userService.add();
    }

输出:

service add......abc
Dao add......

我们可以看到注入到String类型中的值确实是输出来了

而且注入的Dao对象也确实是注入进去了

在注入Dao属性那里我们也可以根据Resource注解注入属性

//    //@Resource  //根据类型注入
//    @Resource(name = "userDaoImpl1")  //根据名称注入
//    private UserDao userDao;

 

二、完全注解开发:

完全注解开发,不需要写配置文件,但是需要写配置类:

@Configuration  //作为配置类,替代xml配置文件
@ComponentScan(basePackages = {"com.learn"})
public class SpringConfig {

}

写过这个类之后就可以实现不用配置文件的注解开发了

java程序:

@Test
    public void testService2() {

        ApplicationContext context = new AnnotationConfigApplicationContext(SpringConfig.class);  

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

        userService.add();

    }

注意这里使用

new AnnotationConfigApplicationContext(SpringConfig.class);  

这个类的构造器,构造器中元素是配置类的class对象。

posted @ 2021-09-26 22:05  Apak陈柏宇  阅读(21)  评论(0编辑  收藏  举报