Springboot注解实现自动装配

jdk1.5支持的注解,Spring2.5就支持注解了。

The introduction of annotation-based configuration raised the question of whether this approach is “better”than XML.

要使用注解须知:

  • 1.导入约束:context约束
  • 2.配置注解的支持:context:annotation-config/
<?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:annotation-config>

    <bean id="cat" class="com.example.springannotation.dao.Cat"/>
    <bean id="cat1" class="com.example.springannotation.dao.Cat"/>
    <bean id="people" class="com.example.springannotation.dao.People"/>
</beans>
  • @Autowired //**如果显示定义了Autowired的required属性为false,说明这个对象可以为null,否则不允许为空**
    @Nullable // 字段标记了这个注解,说明这个字段可以为null;
    //直接在属性上使用即可!也可以在set方式上使用!
    //使用Autowired 我们可以不用编写Set方法了,前提是你这个自动装配的属性在IOC (Spring)容器中存在,且符合名字byname!
  • 如果显示定义了Autowired的required属性为false,说明这个对象可以为null,否则不允许为空如果@Autowired自动装配的环境比较复杂,自动装配无法通过一个注解【@Autowired】完成的时候,我们可以使用@Qualifier(value=“xxx”)去配置@Autowired的使用,指定一个唯一的bean对象注入!
  • @Resource(name=”cat”) //效果与Autowired几乎一致

小结:

@Resource和@ Autowired的区别:

  • 都是用来自动装配的,都可以放在属性字段上
  • Autowired通过byType的方式实现,而且必须要求这个对象存在!【常用】
  • @Resource默认通过byname的方式实现,如果找不到名字,则通过byType实现!如果两个都找不到的情况下,就报错!【常用】
  • 执行顺序不同:@ Autowired通过byType的方式实现。@Resource默认通过byname的方式实现。

测试代码:

 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Qualifier;
 import org.springframework.lang.Nullable;
 import org.springframework.stereotype.Component;
 
 import javax.annotation.Resource;
 // 实体类
 @Component
 public class People {
     @Autowired(required = false)
     private int id;
     
     @Autowired
     @Qualifier(value="cat1")
     private Cat cat;
 
     @Resource(name="cat")
     private Cat cat2;
 
     @Autowired(required = false)
     private String name ="ming";
     @Autowired(required = false)
     private int age = 2;
 
     public People() {
     }
 
     public Cat getCat2() {
         return cat2;
     }
 
     public void setName(@Nullable String name) {
         this.name = name;
     }
 
     public int getId() {
         return id;
     }
 
     public Cat getCat() {
         return cat;
     }
 
     public String getName() {
         return name;
     }
 
     public int getAge() {
         return age;
     }
 
     @Override
     public String toString() {
         return "People{" +
                 "id=" + id +
                 ", cat=" + cat +
                 ", name='" + name + '\'' +
                 ", age=" + age +
                 '}';
     }
 }
 
 //测试类
 package com.example.springannotation.service;
 
 import com.example.springannotation.dao.People;
 import org.springframework.context.ApplicationContext;
 import org.springframework.context.support.ClassPathXmlApplicationContext;
 
 public class TestMain {
     public static void main(String[] args) {
         ApplicationContext context = new ClassPathXmlApplicationContext("bean.xml");
         People people = (People) context.getBean("people");
         people.getCat().Shout();
         people.getCat2().Shout();
         System.out.println(people.toString());
         people.setName(null);
         System.out.println(people.toString());
     }
 }

内容出处:,

声明:本网站所收集的部分公开资料来源于互联网,转载的目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。如果您发现网站上有侵犯您的知识产权的作品,请与我们取得联系,我们会及时修改或删除。文章链接:http://www.yixao.com/procedure/26245.html

发表评论

登录后才能评论