- Spring是一个轻量级的控制反转(ioc)和面向切面的(aop)的容器(框架)
- ioc(inversion of control):控制反转,是一个理论,概念,思想。
描述的是:把对象的创建,对象的属性赋值,对象之间的关系管理。
反转:把原来的开发人员管理,创建对象的权限转移给代码之外的容器实现。由容器代替开发人员管理对象,创建对象
为什么要使用ioc:目的就是减少对代码的改动,也能实现不同的功能。实现解耦合。
ioc的技术实现
DI(Dependency Injection):依赖注入,只需要在程序中提供要使用的对象名称就可以,它是ioc的技术实现。对象如何在容器中创建,赋值,查找都由容器内部实现。
Spring是使用di实现了ioc的功能,spring的底层创建对象,使用的是反射机制;Spring是一个容器,管理对象,给属性赋值,底层是反射创建对象。
di给属性赋值
set注入(简单类型)
步骤1 加入依赖
<dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>5.2.5.RELEASE</version> </dependency>
set注入
<bean id="student" class="com.xiaoluyao.Student"> <property name="name" value="肖路遥"></property> <property name="age" value="25"></property> </bean>
构造注入
<bean id="student" class="com.xiaoluyao.Student"> <constructor-arg name="name" value="肖路遥"></constructor-arg> <constructor-arg name="age" value="25"></constructor-arg> </bean> </beans>
set注入引用类型)
<bean id="student" class="com.xiaoluyao.Student"> <constructor-arg name="name" value="肖路遥"></constructor-arg> <constructor-arg name="age" value="25"></constructor-arg> <property name="school" ref="school"></property> </bean> <bean id="school" class="com.xiaoluyao.School"> <property name="name" value="西南大学"></property> <property name="address" value="重庆"></property> </bean> </beans>
<bean id="student" class="com.xiaoluyao.Student" autowire="byType"> <constructor-arg name="name" value="肖路遥"></constructor-arg> <constructor-arg name="age" value="25"></constructor-arg> </bean> <bean id="school" class="com.xiaoluyao.School"> <property name="name" value="西南大学"></property> <property name="address" value="重庆"></property> </bean> </beans>
<bean id="student" class="com.xiaoluyao.Student" autowire="byName"> <constructor-arg name="name" value="肖路遥"></constructor-arg> <constructor-arg name="age" value="25"></constructor-arg> </bean> <bean id="school" class="com.xiaoluyao.School"> <property name="name" value="西南大学"></property> <property name="address" value="重庆"></property> </bean> </beans>
注解注入
步骤一:配置applictionContext.xml文件
<context:component-scan base-package="com.xiaoluyao"></context:component-scan>
1.@Component 2.@Respotory 3.@Service 4.@Controller
这些都是创建对象,只是功能不同,用于分层
2 访问数据库 ,创建dao的实现类对象,持久层类的上面,dao对象是能访问数据库的
3创建服务的实现类对象,业务层类上面,可以有事物等功能
4控制层(处理层)上面,创建控制器对象,控制器对象,能够接受用户提交的参数,显示请求处理结果
5.@Value
6.@Autowired
7.@Resource