Spring核心
- IOC inverse of 反转控制
使用了Spring以后 对象可以通过XML格式 采用Bean类的规范存储,对象的创建以及依赖关系可以由Spring完成创建以及注入,反转控制就是反转了对象的创建方式,从我们自己创建反转给了程序(Spring) - DI dependency injection
实现IOC需要用DI做主持,目前没demo还没看到
Spring是为了解决企业应用开发的复杂性而创建的,是一个轻量级的控制反转(IoC)[指的是将对象的创建权反转给Spring,作用是实现了程序的解耦合]和面向切面(AOP)的容器框架。
- XML用于数据交换的文件,因此bean放在xml随取随用 有点像键值对应的Session
实验一 Bean的创建 和 Spring创建对象的三种方式
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.springframework.org/schema/beans" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.2.xsd ">
<!--将User对象交给spring容器管理 ,其中name任意,class为全包名
class属性:被管理对象的完整类名
name属性:给被管理的对象起个名字,根据该名称获得对象
可以重复,可以使用特殊字符
id属性:与name属性一模一样
名称不可重复,不能使用特殊字符
结论:尽量使用name属性
-->
<bean name="user" class="com.sjtu.bean.User"></bean>
</beans>
<!--创建方式1:空参构造创建 -->
<bean name="user" class="com.sjtu.bean.User"></bean>
创建容器对象,相对于src下的路径
ApplicationContext ac=new ClassPathXmlApplicationContext("applicationContext.xml");
实验二 属性注入(DI)
- set方法注入
<bean name="user" class="com.sjtu.bean.User" >
<!--值类型注入:为User对象中名为name的属性注入tom作为值-->
<property name="name" value="tom"></property>
<property name="age" value="18"></property>
<!--引用类型注入:为car属性注入下方配置的car对象 car是user中一个对象-->
<property name="car" ref="car"></property>
</bean>
<!--将car对象配置到容器中 -->
<bean name="car" class="com.sjtu.bean.Car">
<property name="name" value="兰博基尼"></property>
<property name="color" value="黄色"></property>
</bean>
使用注解配置Spring
Spring中的注解大概可以分为两大类
1.Spring的bean容器相关的注解,或者说bean工厂相关的注解
2.Spring MVC的相关注解Bean容器相关注解有
@Required
@Autowired(自动装配)
@PostConstruct
@PreDestory
以及和值的注入有关的注解如
@Value
@Scope
SpringMVC相关的注解有
@Controller
@RequestMapping
@RequestParam
@ResponseBody首先理解Java的注解 @Override 等 然后了解Spring为什么引入注解,如何使用,常用注解有哪些 等等
还有Spring的AOP思想 没怎么看懂
AOP 底层的结构 很神奇的操作
AOP 面向切面的编程 好好的一段源代码,可以在运行的时候,给你注入一些行为,方法前 方法后,进行一些
其实是 写一段新的代码 替换 原来的代码
做事务处理的时候 事务 常常需要保证原子性,需要在上下文Context的信息,
常常用AOP的方式,注入前后文Context的信息,如果记录失败的话 都会做回退
具体实现就有点复杂了
装载时候注入 load这个对象的时候 注入一些东西 这一块可以暂时放一放
Alert 就变成原子特性的事务
不需要程序硬编码
把数据和逻辑代码分离 ,因此 现在算法或者模型更新,只需要换逻辑代码即可