一、概述
spring框架在我看来我们只要做三件事就好了。就是IOC(Inversion of Control 控制反转)、DI(Dependency Injection 依赖注入)、AOP(Aspect Oriented Programming 面向切面编程)。
二、详细介绍
1、IOC(Inversion of Control 控制反转)
控制反转并不是什么技术问题,而是一种思想。在传统Java开发中,对象都是开发人员自己维护,还有依赖关系也要开发人员自己注入。现在用了spring之后,对象的创建以及注入都交给了spring去管理。控制权从开发人员变成了spring,这就是控制反转。
2、DI(Dependency Injection 依赖注入)
我们将一些类交给spring容器去管理,当我们需要这个类的时候就不需要自己定义,直接向spring容器所需就行。当spring容器知道我们的需求后就会从它管理的组件里寻找,然后直接给你所需要的组件。
3、spring配置(DI)
3.1、元素属性
bean元素:该元素描述需要spring容器管理的对象
name属性:给被管理的对象起名字,获得对象时使用getBean(“name值”)方法
class属性:被管理对象的全限定名
id属性:与name属性一样,名称不可重复,不能使用特殊字符
3.2、使用配置文件配置
<bean id="servlet1" class="net.seehope.spring.mock.MockServlet1"
scope="singleton" init-method="init" destroy-method="destory">
<!-- DI依赖注入 给零件配置 -->
<!-- 8大基本类型以及String,都是通过value装配 -->
<property name="a" value="1"></property>
<property name="b" value="hello di"></property>
<property name="lines">
<array>
<value>1</value>
<value>2</value>
<value>3</value>
</array>
</property>
<!-- 引用类型装配的时候,必须也要是工厂的零件之一 -->
<property name="mockServlet2" ref="servlet2"></property>
<property name="maps">
<map>
<entry key="1">
<value>1</value>
</entry>
<entry key="hello">
<value>di</value>
</entry>
</map>
</property>
<property name="mockServlet2s">
<list>
<ref bean="servlet2" />
<ref bean="servlet2" />
<ref bean="servlet2" />
<ref bean="servlet2" />
<ref bean="servlet2" />
<ref bean="servlet2" />
</list>
</property>
</bean>
3.3、用注解配置
IOC{
@Controller 控制层
@Service 业务层
@Repository dao层
@Configuration 配置层
@Component 其他默认用当前类名首字母小写,其他不变作为bean的名字
}
DI{
@Autowired 自动写入
1.先判断容器中是否有UserService的实现,如果只有一个,那么直接注入
2.要是不止一个就用@Qualifier("")方法区分具体的UserService实现
}
@Controller("1")
public class UserController {
@Autowired
@Qualifier("userServiceImpl")
private UserService userService;
public void insertUser() {
User user = new User("bs","123456");
userService.insertUser(user);
}
@ResponseBody
@RequestMapping("/user/all")
public List<User> queryAllUser() {
return userService.getAllUser();
}
}
4、AOP(Aspect Oriented Programming 面向切面编程)
4.1、什么是切面、连接点、切点
aspect(切面): 存放了所有切面方法(通知)的类 处理方法。
JoinPoint(连接点):spring只支持方法连接点,被选中的存在bean中的方法一般是service层的方法,连接点就是目标对象中所有可以增强的方法,就是spring允许你是通知的地方。
Pointcut(切点):连接点的集合,目标对象中已经被增强的方法。
Target(目标对象):被代理对象,被通知的对象,被增强的类对象。
Proxy(代理):将通知织入到目标对象之后形成的代理对象。
关于AOP的具体配置请看我的另一篇博客AOP的配置.