1. 控制反转---- Spring经过一种称做控制反转(IoC Inversion of Control)的技术促进了低耦合, 当应用了IoC,一个对象依赖的其它对象会经过被动的方式传递进来,而不是这个对象本身建立或者查找依赖对象。IOC 把对象的建立交给了 Spring,下降了咱们代码类和类之间的耦合度,方便咱们对程序进行扩展和维护java
2. 面向切面----Spring提供了面向切面(AOP Aspect Oriented Programming)的丰富支持,容许经过分离应用的业务逻辑与系统级服务(例如审计(auditing)和事务(transation)管理)进行内聚性的开发。应用对象只实现它们应该作的——完成业务逻辑。在不修改原有代码的基础上增长新的功能,在日志和异常处理方面很经常使用web
**spring注解spring
(1) spring做用在类上的注解有@Component、@Responsity、@Service以及@Controller;而@Autowired和@Resource是用来修饰字段、构造函数或者设置方法,并作注入的。app
(2) 当注解做用在类上时,代表这些类是交给spring容器进行管理的,而当使用@Autowired和@Resource时,代表我须要某个属性、方法或字段,可是并不须要我本身去new一个,只须要使用注解, spring容器会自动的将我须要的属性、方法或对象创造出来。这就是一般所说的依赖注入和控制反转。函数
3. applicationContext.xml 的配置的一些标签spa
id:惟一标识,不能重复
name:设置名字,若是有 id 的话能够和别的重复,不然不能
class:类的全名:包名 + 类名
scope:设置建立模式
singleton:单例,只有一个对象,默认的,最经常使用的(默认)
prototype:多例,每次都是一个新的对象
init-method / destroy-method:在对象建立和销毁的时候调用的方法,
只有在 singleton 下有效,而且方法不能有参数
lazy-init:默认 false 在 bean factories 建立的时候,建立注册过的全部单例类
bean factories 在第一使用 getBean 获取单例对象的时候建立
设置为 true 就是懒加载,只有第一次使用的时候才会去建立对象
autowire:自动把注册过的 bean 关联到当前 bean 对应的属性上
byType:若是注册过的 bean 的类型和属性的类型一致,那么进行赋值操做prototype
这个会实现自动赋值操做日志
byName:根据注册过的 bean 的名字自动注入属性xml
4. DI:Dependency Inject 依赖注入 建立对象时动态为属性赋值 对象
两种方式:setter 注入和 构造方法注入,IOC 是 Spring 帮咱们建立对象,DI 是 Spring 帮咱们为属性赋值
1. 经过 setter 方法进行设置
<property name="name" value="奥迪双钻">
2. 经过构造方法进行设置(index 是参数的索引,从 0 开始 , index 和 type 能够省略)
<constructor-arg name="price" value="200"></constructor-arg>
3. 使用 SpEL 语言赋值:写一些简单的 java 代码
<property name="name" value="#{'bmw'.toUpperCase()}"></property>
<property name="name" value="#{user.name + ' 的汽车'}"></property>
4. p 标签: 须要引入 xmlns:p="http://www.springframework.org/schema/p"
在 bean 标签的属性中使用 p:属性名="" 进行赋值操做
对象赋值须要使用 ref,包括 p 标签也是 p:属性名-ref="bean 的 id"
<property name="owner" ref="user"></property>
5. 集合的赋值
<list></list> ArrayList
<set></set> HashSet
<map> HashMap
<entry>
<key></key>
<value></value>
</entry>
</map>
<props> Properties
<prop key="">value</prop>
<prop key="">value</prop>
</props>
5. 切入点和切入点表达式
切入点:
before:方法执行前,=== 参数校验
after:方法执行后,不管是否产生异常 === 清理资源
after-returing:方法正常执行完毕 === 修改返回值
after-throwing:方法抛出异常 === 包装异常信息
around:方法执行先后两个点
pointcut:切入点表达式
execution(修饰符 返回值 包名.类名.方法名(参数类型))
修饰符:能够省略
返回值:不能省略,可使用 * 代替
包名:com 不能省,可使用 * 代替,
中间的包名也可使用 * 代替,若是想省略须要写 .. 代替
类名,方法名:不能省略,可使用 * 代替
参数:若是只有一个参数可使用 * 代替,若是有多个参数可使用 .. 代替
6. web 项目
在web.xml 中做以下设置
<listener> <listener-class> org.springframework.web.context.ContextLoaderListener </listener-class> </listener> <context-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:applicationContext.xml</param-value> </context-param>