**
Spring之父:Rod Johnson
**
Spring框架
Spring是一个轻量级的企业级框架,Java EE的春天,当前主流框架,提供了IoC容器、AOP实现、DAO/ORM支持、Web集成等功能,目标是使现有的Java EE技术更易用,推进编码最佳实践
内容:
1. IOC(inversion of control )容器: 控制反转?
一切new 对象的权利交给spring!这就是控制反转.
DI(Dependency Injection): 依赖注入 ?
A类需要B类的方法来完成功能.就叫做,A依赖B
将组件对象的控制权从代码本身转移到外部容器
组件化的思想:分离关注点,接口和实现分离
依赖注入:将组件的构建和使用分开,依赖注入让组件之间以配置文件的形式组织在一起,而不是以硬编码的方式耦合在一起
步骤:
在applicationContext.xml中的标签内配置:
测试:
ApplicationContext ac =
new ClassPathXmlApplicationContext(“applicationContext.xml”); ?
A a =(A) ac.getBean(“a”);
//Object | getBean(String name) 获得Bean对象,参数为
a.a();
的value属性的两种写法:
1>
2>
彩色
- AOP(Aspect Oriented Programming)实现:面向切面编程 ?
OOP(Object Oriented Programming):面向对象编程
面向切面并不是面向对象的替代品.而是面向对象的一种有益的补充!
AOP的目标:让我们可以“专心做事”
AOP原理
将复杂的需求分解出不同方面,将散布在系统中的公共功能集中解决
采用代理机制组装起来运行,在不改变原程序的基础上对代码段进行增强处理,增加新的功能
AOP的目的是从系统中分离出切面,独立于业务逻辑实现,在程序执行时织入程序中运行
增强,我们可以对”面”加入增强或者有益的代码。
软件的设计原则: 开闭原则,对添加开放,对修改关闭。
aop就是为了解决开闭原则的。
切入点表达式:
public * *(..) : 任意返回,方法名任意,参数任意
public void *(..) : 所有公开的无返回的任意参数的方法.
public void *(models.User) 匹配具体参数
public void add*(..) 匹配add作为方法名的前缀
* dao.impl..(..) 匹配dao.impl下所有类所有方法,任意参数
dao.impl.User 可以 dao.impl.user.User 不可以
* dao.impl...(..) 匹配包以及子包中的所有类方法,任意参数(.. 匹配子包)
步骤:
1. 编写前置增强处理类:
public class BeforeCompany implements MethodBeforeAdvice {
//实现MethodBeforeAdvice接口,并重写before()方法
@Override
public void before(Method arg0, Object[] arg1, Object arg2) throws Throwable {
}
}
编写后置增强处理类:
public class AfterCompany implements AfterReturningAdvice {
//实现AfterReturningAdvice接口,并重写afterReturning()方法
@Override
public void afterReturning(Object arg0, Method arg1, Object[] arg2, Object arg3) throws Throwable {
}
}在applictionContext.xml中配置:
正则表达式:所有汉字. ?
项目的基本结构(共6层):
表示层:jsp
控制层:controller(struts的action)/servlet
业务层: service / biz 接口+实现类
数据层:dao组件
实体层:models/entity/pojo/vo/javabean
通用层:工具类,转码,加密(MD5)…
在applictionContext.xml中配置:
不用看的项目:
Spring_1_test1~Spring_1_test3
一、三种注入方式:
1.get和set : 标准
userDao类 一定要提供get和set方法
- P命名 : 减少配置的工作量
1>基本数据类型的注入 p:属性名=”值”
2>引用类型的注入 p:属性名-ref=”引用的bean id”
3.构造器
public class UserBiz implements IUserBiz {
private IUserDao userdao;
public UserBiz(IUserDao userdao){//添加一个构造方法用于构造器注入的测试
this.userdao = userdao;
}
}
二、各种数据类型的注入:
1.注入直接量(基本数据类型)
a)乔&丹 特殊符号
i.