主要技术思想:IOC,AOP,事务
应用:整合框架
org.springframework
spring-context
org.aspectj
aspectjweaver
IOC控制反转
思想含义:我们只需要定义一个对象,将定义信息交由系统去实行创建对象行为。
spring实现思路:做一个容器,获取对象定义信息,通过定义信息来对对象进行初始化。对象定义信息中主要包含实例变量的初始化值和声明依赖注入。
编码需求:容器的配置,需要IOC的对象定义
- 容器配置编写:可以写在xml文件中,也可以写在java文件中
例:@Configuration
@Import(“要加入的配置信息”) //加入另外的配置信息
@ComponentScan(“需要IOC的对象定义信息所在包”) //配置IOC对象所在包
@PropertySource(“properties文件路径”) //配置读取属性的路径
class A{} - 要IOC的对象的定义编写:在对象对应的类上添加@Component标签表示要进IOC容器,在类的内部编写对象信息
例:@Component(value=“id”)
class A{
@Value(“…”)
private int a;
@AutoWired
private Object obj;
}
ps:@Repository,@Service,@Controller与@Component作用相同,但前三个特别写在Dao层类,Service层类,Controller层类上 - 第三方包中配置IOC对象:自己在配置类中编写一个方法返回要进IOC的对象,给方法设置@Bean注解
例:@Configuration
class A{
@Bean
public Obj fun(Obj2 obj2){
Obj obj=new Obj();
obj.set… //相当于定义对象中的字段值
return obj;
}
}
ps:方法中的参数会自动依赖注入
实际编码运用:导入依赖,new容器对象,将配置类传入参数,之后拿new出来的容器进行后续操作
例:main(){
AnnotationConfigApplicationContext contaner=new AnnotationConfigApplicationContext(***.class);
Obj obj=container.getBean(…);
System.out.println(obj);
}
AOP面向切面编程
思想含义:为方法添加一些操作,但不改源码。
spring实现思路:获取对象信息和aop相关信息,两个信息组合起来去创建一个对象。
编码需求:方法修改信息,写在一个java文件中;在IOC容器上加@EnableAspectJAutoProxy
例:
@Component
@Aspect
class A{
@PointCut(“excution(public void com.zjh.User.getName())”)
private void fun1(){}
@Before(“fun1()”)
public void fun2(){
*****
}
}
ps:
上面的配置类中主要包含3个信息:需要附加操作的方法,附加操作,方法和附加操作的具 体匹配和附加方式。
表示需要附加操作的方法的式子有3个通配符:* , … , + 。
附加方式有5种(前3种常用):@Before,@After,@Around,@AfterReturning,@AfterThrowing。编写Around的附加操作时需要利用ProceedingJoinPoint对象表示需要附加操作的方法,并用proceed方法调用原方法。
JoinPoint对象是ProceedingJointPoint的父类,后者专用在Around附加中,前者就用在别的附加中。