有之以为利,无之以为用
文章目录
前言
Spring:基于注解(Dependency Injection)的IOC
DI是IOC的具体实现的技术
基于注解的IOC,必须要在Spring的核心配置文件中添加包扫描。
一、创建对象的注解
@Component:可以创建任意对象。创建的对象的默认名称是类名的驼峰命名法,也可以指定对象的名称,如:@Component(“指定名称”)。
@Controller :专门用来创建控制器的对象
@Service :专门用来创建业务逻辑层的对象,负责向下访问数据访问层,处理完毕后的结果返回给界面层
@Repository:专门用来创建数据访问层的对象,负责数据库中的CRUD所有操作
(只记录了4个常用的)
二、依赖注入的注解
2.1简单类型类型的注入
@Value:用来给简单类型(8种基本类型+String)注入值
2.2引用类型的注入
2.2.1@Autowired
@Autowired:使用类型注入值,从整个Bean工厂中搜索同源类型的对象进行注入。
同源类型才可注入
同源类型:
· 被注入的类型(Student种的school)与注入的类型(school)是完全相同的类型
· 被注入的类型(Student种的school父)与注入的类型(子)是父子类
· 被注入的类型(Student种的school接口)与注入的类型(实现类)是接口和实现类的类型
注意:在有父子类的情况下,使用按类型注入,就意味着有多个可注入的对象。此时按照名称进行二次筛选,选中与被注入对象相同名称的对象进行注入
2.2.2@Autowired+@Qualifier
@Autowired (两个注解一起用)
@Qualifier :使用名称注入值,从整个Bean工厂中搜索相同名称的对象进行注入。
注意:如果有父子类的情况下,直接按名称进行注入值
三、添加包扫描的方式
3.1单个包扫描(推荐使用)
<context:component-scan base-package="org.example.controller"/>
<context:component-scan base-package="org.example.service.impl"/>
<context:component-scan base-package="org.example.dao"/>
3.2多个包扫描
多个包之间以逗号或分号分隔(一次性经行多包扫描)
<context:component-scan base-package="org.example.dao,org.example.service.impl,org.example.controller"/>
3.3扫描根包(不推荐)
会降低容器启动速度(多做无用功)
<context:component-scan base-package="org"/>
四 、为应用指定多个Spring配置文件
当项目越来越大,需要多人合作开发,一个配置就存在很大隐患
4.1拆分配置文件的策略
·按层拆:
application_controller.xml
<bean id="uController" class="com.bjpowernode".controller.UsersController">
<bean id="bController" class="com.bjpowernode".controller.BookController">
application_service.xml
<bean id="uService" class="com.bjpowernode".controller.UseRSService">
<bean id="bService" class="com.bjpowernode".controller.BookService">
application_mapper.xml
<bean id="uMapper" class="com.bjpowernode".controller.UsersMapper">
<bean id="bMapper" class="com.bjpowernode".controller.BookMapper">
·按功能拆
application_users.xml
<bean id="uController" class="com.bjpowernode".controller.UsersController">
<bean id="uService" class="com.bjpowernode".controller.UseRSService">
<bean id="uMapper" class="com.bjpowernode".controller.UsersMapper">
application_book.xml
<bean id="bController" class="com.bjpowernode".controller.BookController">
<bean id="bService" class="com.bjpowernode".controller.BookService">
<bean id="bMapper" class="com.bjpowernode".controller.BookMapper">
五、Spring配置文件的整合
5.1单个文件导入
<!--单个导入-->
<import resource="applicationContext_mapper.xml"/>
<import resource="applicationContext_service.xml"/>
<import resource="applicationContext_controller.xml"/>
5.2批量导入
<import resource="applicationContext_*.xml"/>
六、基于xml类型的自动注入
<bean id="stu" class="org.example.pojo2.Student" autowire="byName">
<property name="name" value="李松"></property>
<property name="age" value="24"></property>
<!-- <property name="school" ref="school"></property>-->
byName=@Autowired
byType=@Autowired+@Qualifier