关于java:面试官小伙子讲一下spring依赖注入吧网友就这就这啊

55次阅读

共计 2480 个字符,预计需要花费 7 分钟才能阅读完成。

前言

  • 依赖注入 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、分布式缓存、数据结构等等。

正文完
 0