【学习笔记】Spring注解开发

Spring注解开发

使用注解开发首先要导入context约束,然后开启注解支持

<?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">
</beans>
<context:annotation-config/>

之前在配置文件中做的事情都可以使用注解来做,比如:bean的注册、属性的注入、规定作用域等等

  1. bean的注册

    使用的注解是 @Component 把该注解加在某个类上,就等价于把这个类注册到spring容器中

    @Component
    public class User {
        private String name;
    }

    需要注意的是要在配置文件中,扫描某个包下的所有类的注解,这样注解才会生效

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

    由@Component衍生出几个注解,如下:

    • dao层 ---- @Repository

    • service层 ----- @Service

    • controller层 ---- @Controller

    这几个注解是在MVC三层架构下使用的,每一个适用于该层架构,它们和@Component功能相同

  2. 属性的注入

    在上一篇文章中,我们探究了关于类作为属性如何注入以及使用注解@Autowired注入

    下面是普通属性,利用注解注入

    使用的注解是 @Value,可以放在属性上也可以放在set方法上

    @Value("张三")
    private String name;

    这句话等价于,在配置文件中的

    <property name="name" value="张三"/>
  3. 规定作用域

    在之前的文章中讲到,目前涉及到到作用域有 singleton 和 prototype

    利用注解 @Scope 可以规定这个bean的作用域

    @Scope("singleton")
    public class User {
        @Value("张三")
        private String name;
    }

Java的方式配置Spring

使用Java的方式配置Spring,可以完全放弃使用xml配置文件,通过java类和注解的结合,可以实现xml的配置功能

首先写一个实体类

package com.wang.pojo;
​
public class User {
    private String name;
​
    public String getName() {
        return name;
    }
​
    public void setName(String name) {
        this.name = name;
    }
}

这个时候,我们没有xml配置文件,所以给它加上注解也没有什么用

要想让他的注解有作用,就要写一个Java配置类,给这个类加上一个注解 @Configuration

@Configuration
public class AppConfig {
​
}

点进这个注解,发现这个注解也是@Component

image-20230214145929686

给AppConfig类加上@Configuration注解后,如果想要把实体类User注册到容器中还需要写一个方法,并且把这个方法用 @Bean 注解,如下

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

这个类相当于在xml中注册一个bean

<bean id="getUser" class="com.wang.pojo.User"/>

bean 的id 相当于 方法的方法名

bean 的class 相当于 方法的返回值类型

这时这个实体类被注册到spring容器中了

然后在测试类中,使用AnnotationConfigApplicationContext 获得上下文

public void test01(){
    AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(AppConfig.class);
    User getUser = (User) context.getBean("getUser");
    System.out.println(getUser.getName());
}

AnnotationConfigApplicationContext() 需要传一个java类

posted @ 2023-02-14 15:29  GrowthRoad  阅读(16)  评论(0编辑  收藏  举报