spring注入的三种方式区别,spring两种注入
写爬虫互联网协议(互联网协议)被封了怎么解决?立即使用
Spring 常用的三种注入方式
1、构造方法,采用反射的方式,通过构造方法来完成注入。
先简单了解一下测试项目的结构,用专家构建的,四个包:
实体:存储实体,里面只有一个用户类
道:数据访问,一个接口,两个实现类
服务:服务层,一个接口,一个实现类,实现类依赖于接口
测试:测试包
在春天的配置文件中注册用户服务,将UserDaoJdbc通过构造函数参数标签注入到户服务的某个有参数的构造方法
!-注册用户服务-
bean id= userService class= com。吕。春天。服务。impl。用户服务
constructor-arg ref= userDaoJdbc /constructor-arg
/bean
!-注册数据库编程实现的道-
bean id= userDaoJdbc class= com。吕。春天。道。impl。userDaoJdbc /bean如果只有一个有参数的构造方法并且参数类型与注入的豆的类型匹配,那就会注入到该构造方法中。
公共类户服务实现IUserService {
私有IUserDao用户岛
公共用户服务(IUserDao userDao) {
this.userDao=userDao
}
公共void loginUser() {
userdao。登录用户();
}
}
@测试
公共void testDI() {
应用程序上下文AC=new classpathmlaplicationcontext(应用程序上下文。XML’);
//获取豆对象
UserService用户服务=AC。getbean(UserService。class, UserService );
//模拟用户登录
用户服务。登录用户();
}测试打印结果:jdbc-登录成功
2、二传手,也是采用反射的方式,不过是通过作曲者来完成注入。
配置文件如下:
!-注册用户服务-
bean id= userService class= com。吕。春天。服务。impl。用户服务
!-写法一-
!-property name= UserDao ref= userDaoMyBatis /property-
!-写法二-
属性名称= userDao ref= userDaoMyBatis /属性
/bean
!-注册框架实现的道-
bean id= userDaoMyBatis class= com。吕。春天。道。impl。userDaoMyBatis /bean切记:名称属性值与类中的成员变量名以及设置方法的参数名都无关,只与对应的设置方法名有关,下面的这种写法是可以运行成功的
公共类户服务实现IUserService {
私有IUserDao userDao1
public void setUserDao(IUserDao userdao 1){
这个。userdao 1=userdao 1
}
公共void loginUser() {
userdao 1。登录用户();
}
}还有一点需要注意:如果通过设置方法注入属性,那么春天会通过默认的空参构造方法来实例化对象,所以如果在类中写了一个带有参数的构造方法,一定要把空参数的构造方法写上,否则春天没有办法实例化对象,导致报错。
3、基于注解,常用的有" @自动书写"和@资源。
示例代码
//candidateBeans为上一步通过类型匹配到的多个豆子,该地图中至少有两个元素。
受保护的字符串determineAutowireCandidate(MapString,Object candidateBeans,dependency descriptor descriptor){
//requiredType为匹配到的接口的类型
班级?必需的类型=描述符。getdependencytype();
//1.先找豆上有@主要注解的,有则直接返回
字符串主候选=this。determineprimarycandidate(候选beans,必需类型);
if (primaryCandidate!=null) {
返回初选候选人
}否则{
//2.再找豆上有@顺序,@优先顺序注解的,有则返回
字符串优先级候选=this。determinehighestprioritycandidate(候选beans,必需类型);
如果(优先级候选人!=null) {
返回优先候选人
}否则{
迭代器var6=candidateBeans.entrySet().迭代器();
字符串候选人姓名
对象beanInstance
做{
如果(!var6.hasNext()) {
返回空
}
//3.再找豆的名称匹配的
EntryString,Object Entry=(Entry)var 6。next();
candidatebean name=(String)entry。getkey();
bean实例=条目。getvalue();
} while(!这个。可解析的依赖关系。值().包含(beanInstance)!这个。匹配bean名称(候选bean名称,描述符。get dependency name());
返回候选人姓名
}
}
}推荐教程: 《Java教程》 以上就是春天常用的三种注入方式的详细内容,更多请关注我们其它相关文章!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。