前言

  • 依赖注入DI(Dependency Injection)的三种注入办法应用介绍
  • set办法
  • 构造方法
  • 注解法

应用set办法注入

如下图中UseService文件依赖Userdao对象,能够通过setUserDao11函数设置注入

配置文件应用property标签配置注入内容
留神:配置文件中name参数的值取至set办法后跟的内容同时首字母小写
例如:set办法名是setUserDao111,那么name的值就是userDao111。

应用有参构造函数注入

有参构造函数注入应用constructor-arg标签name是要注入的构造函数的参数名

如果注入的内容是援用类型,就应用‘ref=’给对象赋值,且对象的值必须是在配置文件中注册过的的对象id,如本文中的userServiceId和userDaoId,如果注入内容是一般数据类型,就应用‘value=’赋值,赋的值能够是任意值,无需提前注册。

应用注解

应用注解办法时不须要在配置文件中增加各个要注入的内容,而是在配置文件中配置组件扫描即可,源文件也不在须要定义set办法,构造方法。

在配置文件中增加如下语句,即可让spring扫描com.syx.dao包下的所有注解,否则spring无奈辨认你注解的内容

<context:component-scan base-package="com.syx.dao"></context:component-scan>

具体注解办法如下:

// 应用Component增加id为userServiceId的注解相当于配置文件执行了// <bean id="userServiceId" class="com.syx.dao.service.UserService"/>@Component("userServiceId")public class UserService {    // Autowired和Qualifier组合作用是依照名称进行注入,应用相当于    // <constructor-arg name="userdaoparam" ref="userDaoId"></constructor-arg>    @Autowired    @Qualifier("userDaoId")    private UserDao userdaoparam;    // Value是依照值进行注入,相当于    // <property name="test_a" value="13"></property>    // 注解中的值能够是${...}表达式    @Value("13")    private int test_a;    public void test() {        System.out.println("注入值是" + test_a);        userdaoparam.test();    }}

罕用配置文件注入标签应用示例

  <bean id="userServiceId" class="com.syx.dao.service.UserService">      <property name="userDao11" ref="userDaoId"></property>      <!-- test_a 是int类型数据注入值100 -->      <property name="test_a" value="100"></property>                  <!-- strList是List<String>汇合,应用如下办法给汇合增加两个成员aaa和bbb -->      <property name="strList">          <list>              <value>aaa</value>              <value>bbb</value>              <!-- 如果汇合List存储的是援用类型数据 需改用ref标签赋值,如下              <ref bean="userDaoId"></ref>              -->          </list>      </property>      <!-- userMap是Map<String, String>类型数据 -->      <property name="userMap">          <map>              <entry key="adc" value="def"></entry>              <!-- 如果Map的键值对均为援用类型,那么要应用如下标签进行注入              <entry key-ref="adc" value-ref="def"></entry>              -->          </map>      </property>      <!-- properties是一个Properties类型数据 -->      <property name="properties">          <props>              <prop key="adc">123456</prop >              <prop key="adc">fkgj</prop >          </props>      </property>  </bean>

注解详解

  • @Component和@Controller、@Service、@Repository三个注解性能完全一致,只不过后三个个别别离用于web层,service层和dao层,更能起到表意作用。
  • @Autowired用于字段的依赖注入,当spring容器中只有某类的一个bean时,能够独自应用。

@Qualifier联合@Autowired按名称给字段注入
@Resource(name = “bean_id”)相当于@Qualifier和@Autowired(“bean_id”)配合应用

  • @Value 注入一般值属性,通常Value的值会应用${…}表达式
  • @Scope 设置bean是仅创立单个对象还是能够创立多个对象。
  • @PostConstruct设置bean的初始化办法,作用等同于配置文件中的init-methond="…"
  • @PreDestroy设置bean的销毁办法,作用等同于配置文件的destory-methond="…"

总结

欢送关注公众号:前程有光,支付一线大厂Java面试题总结+各知识点学习思维导+一份300页pdf文档的Java外围知识点总结! 这些材料的内容都是面试时面试官必问的知识点,篇章包含了很多知识点,其中包含了有基础知识、Java汇合、JVM、多线程并发、spring原理、微服务、Netty 与RPC 、Kafka、日记、设计模式、Java算法、数据库、Zookeeper、分布式缓存、数据结构等等。