Spring核心功能介绍
SPring核心包括:
控制反转IOC
依赖注入DI
面向切面AOP
IOC
把创建对象的权利交给框架做,实现可插拔的接口编程。降低耦合,易维护。
比如,你去某地旅游,不需要自己订酒店,只需要联系去哪儿或者携程,他们会帮你订购一个舒适便宜的酒店,平台的这个行为可以称之为控制反转。
DI
组件之间依赖关系由容器在运行期决定。由容器动态地将某个依赖关系注入到组件中。目的为提升组件重用的频率,为系统搭建灵活、可扩展的平台。通过过依赖注入机制,只需要简单的配置,无需任何代码就可指定目标需要的资源,完成自身的业务逻辑。
IOC
DI是实现IOC的方法和手段。
依赖注入的常见实现方式:
1.setter注入
2.构造方法注入
3.注解注入
1.setter注入
Java代码:
public class UserController {
// 注入 UserService 对象
private UserService userService;
public void setUserService(UserService userService){
this.userService = userService;
}
}
XML配置
<bean name="userController" class="com.learning.controller.UserController">
<!-- 依赖注入 -->
<property name="userService" ref="userService"></property>
</bean>
<bean name="userService" class="com.learning.dao.impl.UserServiceImpl"></bean>
Bean标签的常用属性说明:
id:为实例化对象起名称,根据id值可以得到我们配置的实例化对象,id属性的名称原则上可以任意命名,但是能包含任何特殊符号;
class:创建对象所在类的全路径;
name:功能和id属性一样,但是现在一般不用;与di的区别在于:name属性值里可以包含特殊符号,但是id不可以;
scope:一般最常用的有2个值:Singleton:单例模式,整个应用程序,只创建bean的一个实例;Prototype:原型模式,每次注入都会创建一个新的bean实例,Spring默认是单例模式。
2.构造方法注入
Java代码:
public class UserController {
private UserService userService;
public UserController(UserService userService){
this.userService = userService;
}
}
XML配置:
<bean name="userController" class="com.learning.controller.UserController">
<!-- 依赖注入 -->
<constructor-arg ref="userService"></constructor-arg>
</bean>
<bean name="userService" class="com.learning.dao.impl.UserServiceImpl"></bean>
3.注解注入
@Controller
public class UserController {
// 使用注解自动注入
@Autowired()
private UserService userService;
// do something
}
// 创建依赖对象
@Service
public class UserService {
// do something
}
创建依赖对象的常见注解:@Component、@Controller、@Service、@Repository。
面向切面编程(AOP)
将系统按照功能分类,每一个类就是一个“切面”,我们再针对不同的切面定制相应的规则,这样的开发模式被称为面向切面编程。