目录
20220527
Q1:Spring有哪些注入方式?
基于Xml的注入和基于注解的注入
Q2:相似阐述基于xml的注入方式
所谓注入,即对Spring容器中的对象进行属性赋值。根据赋值的方式,可以分为:
①set注入:即根据类的set方法对属性赋值
简单类型使用name和value来指定属性和值
引用类型使用name和ref来指定属性和值
②构造注入:即根据类的构造函数对属性赋值
基于name进行构造注入
基于index进行构造注入
Q3:什么是引用类型的自动注入?如何实现自动注入?
如果一个类的成员包括引用类型,当满足某些条件时,Spring可以为这些属性自动赋值,即引用类型的自动注入。有以下两种方法实现自动注入:
byName:如果Spring容器中包含的类A,其id和类B的某个属性c的名称相同,且A的class和c相同
byType:如果Spring容器中包含的类A,其类型和类B的某个属性c的类型同源可以实行自动注入
同源包括以下可能:same、接口与实现类、父子类。
20220527
Q4:如何实现基于注解的依赖注入
基于注解的依赖注入,可以实现类实例化和属性赋值两部分内容
在环节上包括写注解和扫描注解
Q5:如何基于注解实例化java类
①@component :表示创建对象,对象放到容器中,作用是XML中的bean
* 属性value:表示创建的对象的名称,等价于bean中的id,例如:
* @Component(value = "myStudent")
* 等价<bean id=“myStudent” class=“org.example.ba1.Student”/>
以下等价:
@Component(value = "myStudent") // kv
@Component("myStudent") // v
@Component() // default
同时,需要在xml中配置组件扫描器
组件扫描器:component-scan:扫描包和子包—找所有的注解—创建对象/属性赋值
② 和@component功能相同的创建对象的注解
@Repository:dao接口的实现类上面,表示创建dao对象,持久层对象能访问数据库
@Service:业务层的实现类上面,表示创建业务层对象,业务层对象有事务的功能
@Controller:控制器上面,表示创建控制器对象,属于表示层。控制器对象能接受请求, 把请求的处理结果显示给用户。
Q6:如何使用组件扫描器扫描多个包
1、多个扫描器
2、 分隔符
3、父包
Q7:如何基于注解实现属性注入
① 基本类型的属性注解
@Value
* 属性:value 表示具体的属性值,value本身可以省略
* 位置:1)在属性定义的上面,无需set方法
* 2)或者在set方法上面
另外,可以使用外部配置文件中的属性值
先在xml文件中定义配置文件的位置,然后在代码中引用
② 引用类型的属性注解
2.1 @Autowired:Spring 框架提供的,给引用类型赋值,使用自动注入原理。可以byName和byType,默认是后者
位置:在属性定义上面,无需set方法,推荐使用,或者在set方法上面。
如果想使用Autowired的基于name的注入方法,需要使用@Qualifer注解 如下:
最后,Autowired还有一个required属性,如果为真 Spring会检查引用类型时候赋值成功,失败会终止运行并报错;如果为假,赋值失败会pass赋值,不会报错。
2.2 @Resource:来自jdk中,给引用类型赋值,支持byName和byType,默认byName。Spring支持其使用
位置: 属性定义的上面,无需set方法,推荐使用;或者set方法上面。
说明:jdk高于1.8 没有@Resource 需要手动加入依赖
默认情况下,不需要写属性,Spring会找和属性同名的对象对属性赋值,失败会使用byType尝试。如果显式的写出nama属性,只会使用byName。