欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Spring注解开发

程序员文章站 2022-03-05 12:05:53
...

常用依赖

		<dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-webmvc</artifactId>
            <version>5.2.0.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-jdbc</artifactId>
            <version>5.2.0.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.junit.jupiter</groupId>
            <artifactId>junit-jupiter</artifactId>
            <version>5.4.2</version>
            <scope>test</scope>
        </dependency>

1. 注解说明

  • @Autowired : 自动装配,通过类型,名字。

    如果@Autowired自动装配的环境比较复杂,自动装配无法通过一个注解@Autowired完成的时候,我们可以使用@Qualifier(value=“xxx”)去配置@Autowired的使用,指定一个唯一的bean对象注入!

    public class People {
        @Autowired
        @Qualifier(value="dog11")
        private Dog dog;
        @Autowired
    	@Qualifier(value="cat11")
        private Cat cat;
        private String name;
    }
    
  • @Nullable 字段标记了这个注解,说明这个字段可以为null。

  • @Resource: 自动装配,通过类型,名字。

    • public class People {
        @Resource(name = "cat2")
        private Cat cat;
      }
      
    • public class People {
       private Cat cat;
      }
      
  • @Component : 组件,放在类上,说明这个类被Spring管理了,就是一个Bean

2. 属性如何注入

//等价于 <bean id = "user" class = "com.shp.pojo.User">
//@Component  组件
@Component
public class User {
    //相当于 <property name="name" value="商怀朋"/>
    //@Value("商怀朋")也可以
    public String name;
    
    //相当于 <property name="name" value="商怀朋"/>
    @Value("商怀朋")
    public void setName(String name) {
        this.name = name;
    }
}

3. 衍生的注解

@Component 有几个衍生的注解,我们在web开发中,会按照MVC三层架构分层

	- dao 【@Repository】 (仓库的意思)
	- service 【@Service】
	- controller【@Controller】

这四个注解功能是一样的,都代表将某个类注册到Spring容器中进行装配

4.自动装配注解

  • @Autowired : 自动装配,通过类型,名字。

  • @Nullable 字段标记了这个注解,说明这个字段可以为null。

  • @Resource: 自动装配,通过类型,名字。

5. 作用域

  • @Scope 作用在类上 singleton:单例模式 prototype :原型模式
@Component
@Scope("singleton")
public class User {
    //相当于 <property name="name" value="商怀朋"/>
    //@Value("商怀朋")也可以
    public String name;


    //相当于 <property name="name" value="商怀朋"/>
    @Value("商怀朋")
    public void setName(String name) {
        this.name = name;
    }
}

6. 小结

xml 与 注解:

  • xml更加万能,适用于任何场合!维护简单方便
  • 注解,不是自己的类使用不了,维护相对复杂

最佳实践:

  • xml用来管理bean
  • 注解只用来用于属性的注入
  • 我们在使用的过程中,只需要注意一个问题:必须让注解生效,导入相关支持
    <!--    指定要扫描的包,这个包下的注解就会生效 -->
    <context:component-scan base-package="com.shp.pojo"/>
    <context:annotation-config/>
相关标签: Spring