springboot抽象类可以依赖注入吗_可以通过多少种方式完成依赖注入?

5ad18d6ae1946ee7f78569484b3abdb9.png

通常,依赖注入可以通过四种方式完成,即:

  1. 构造方法注入:调用被注入对象的构造方法注入,对象在构造完成就进入了就绪状态。
  2. 属性注入:Autowired属性赋值。
  3. Setter注入:调用setter/getter方法。
  4. 接口注入:实现某个接口。不提倡。

各有优缺点:

  1. constructor注入的优点:允许一个应用程序组件实现为不可变对象,并确保所需的依赖项不是空。缺点就是:构造器就会显得冗余,维护起来也较为困难;

2. setter注入的一个好处是,使类的对象可以在之后重新配置。缺点是注入的时候,不能将对象设为final的;

3. 当我们在field变量上来实现注入,优点是简单,缺点如下

a. 这样不符合JavaBean的规范,而且很有可能引起空指针;

b. 同时也不能将对象标为final的;

c. 类与DI容器高度耦合,我们不能在外部使用它;

d. 类不通过反射不能被实例化,你需要用DI容器去实例化它,这更像集成测试;

示例:

构造函数注入:

public class Student {
    private String sName;
    private String sRemark;

    public Role(String sName, String sRemark) {
        this.sName = sName;
        this.sRemark = sRemark;
    }
}

配置文件

<bean id="s1" class="Student">
    <constructor-arg index="0" value="张三"/>
    <constructor-arg index="1" value="211本科,计算机专业,工作时间3年"/>
</bean>

setter注入:

public class UserServiceImpl implements UserService{
	private UserDao userDao;
 	public void setUserDao(UserDao userDao){
  		this.userDao = userDao;
 	}
}

配置文件:

 <bean id="userDao" class="UserDao"></bean>
 <bean id="userService" class="UserServiceImpl">
 <property name="userDao" ref="userDao">
 </bean>

属性注入:

@Service
public class UserServiceImpl implements UserService{
	@Autowired
	private UserDao userDao;
}

配置文件:

 <bean id="userDao" class="UserDao"></bean>
 <bean id="userService" class="UserServiceImpl"/>

《JAVA面试机经基础篇》 郭屹老师著

4e18d5f20ff7ae2e1853a0fb9be4fddf.png
百度搜索JAVA面试机经基础篇即可

欢迎搜索关注公众号 爪哇河谷

或添加我的微信 领取更多干货

e03a4dee608ed1eab08da59d58450e53.png
表情包
插入表情
评论将由博主筛选后显示,对所有人可见 | 还能输入1000个字符
相关推荐
©️2020 CSDN 皮肤主题: 游动-白 设计师:白松林 返回首页