SpringAOP

1.Spring的依赖注入

1.1什么是Spring
它是一个轻量级IOC(DI)AOP容器框架

IOC控制反转 现在创建bean的方式,是交给spring帮我们创建
DI依赖注入 spring它是容器框架,是一个bean(装对象的)容器框架,spring帮我创建好对象之后,在把我们创建好的对象 注入到相应的类里面 这个过程
AOP: 面向切面的编程

使用场景:事务管理,日志管理,性能控制
在这里插入图片描述1.2 Spring的依赖注入

1.2.1 set方式注入(最开始)
以前

UserController{

​ private UserService userService;

​ void setUserService(UserService userService){

​ this.userServicer = userService;

​ }

}
1.2.2构造器注入–掌握

index索引注入
constructor-arg index=“0” value=“123”></constructor-arg

name 参数名字注入
constructor-arg name=“id” value=“456”></constructor-arg

type类型注入
constructor-arg type=“java.lang.Long” value=“111”></constructor-arg

1.2.3 类里面属性注入–掌握
最常用就是基本类型和引用类型注入 --掌握
property name=“id” value=“111”></property
property name=“name” value=“康康”></property

property name=“hellobean” ref=“hb”></property
property name=“hellobean”
bean class=“xxxx”></bean
/property

map list/set/array了解

注入properties – 掌握
property name=“prop2”>
props>
prop key=“driverClassName”>com.mysql.jdbc.Driver
prop key=“username”>qiang强
/props>
/property>

1.3XML版本自动注入–了解

可以byNam注入 – 按照名称自动注入
或者byType注入 – 按照类型自动注入

1.4 XML版本注解注入–掌握
扫描包路径
<context:component-scan base-package="_03_annoxml.cn.itsource"></context:component-scan>

@Atuowrite自动注入

如果一个接口有两个实现情况下:
方案一:一个接口有多个实现的情况下面 通过名字去区分
方案二:通过Resource这个注解

区别:@Autowired和@Qualifier 都是属于spring的注解 ,
Resource使用jdk的注解 推荐使用Autowired和Qualifier,可以和spring进行无缝衔接
autowired默认是根据类型匹配,如果类型匹配不上在根据名字匹配
而Resource默认根据名字匹配,名字匹配不上就匹配类型

2.Spring里面的AOP功能

2.1 什么是springAOP
aop: 面向切面的编程

在这里插入图片描述2.2aop的实现

aop底层使用代理模式实现

jdk代理模式 --有接口情况下

cglib动态代理 --没有接口情况下

2.3springaop配置方式
xml版本的配置
在这里插入图片描述注解版
@Component
@Aspect //AOP的类注解
public class TxManager {
//设置切点
@Pointcut(“execution(* cn.itsource.aopanno.IService.(…))”)
public void pointcut(){}
//前置通知
@Before(“pointcut()”)
public void begin(){
System.out.println(“开启事务…”);
}
//后置通知
@AfterReturning(“pointcut()”)
public void commit(){
System.out.println(“提交事务…”);
}
//异常通知
@AfterThrowing(pointcut=“pointcut()”,throwing=“e”)
public void rollback(Throwable e){
System.out.println(“回滚事务…”);
System.out.println(e.getMessage());
}
//最终通知
@After(“pointcut()”)
public void close(){
System.out.println(“关闭资源…”);
}
}

环绕方法
//温馨提醒:如果要使用环绕通知的话,把其它几个通知的注解去掉(不然会出现重复)
@Around(“pointcut()”)
public Object around(ProceedingJoinPoint joinPoint){
Object object = null;
try {
begin();
object = joinPoint.proceed(); //执行相应的代码
commit();
} catch (Throwable e) {
rollback(e);
}finally{
close();
}
return object;
}

3.创建Bean的方式

3.1实例化一个有公共无参的构造方法

自己写的对象:Dao,Service,Action都使用这种方法
entityManager= entityManagerFactory.createEntityManager();

bean id=“myBean” class=“cn.itsource.spring.day2.d_prop.MyBean”/>

3.2使用FactoryBean

public class MySessionFactoryBean implements FactoryBean {
//最后返回的则是这一个对象
@Override
public SessionFactory getObject() throws Exception {

	return new SessionFactory();
}
//返回类型
@Override
public Class<?> getObjectType() {
	return SessionFactory.class;
}
//是否是单例
@Override
public boolean isSingleton() {
	// TODO Auto-generated method stub
	return true;
}

}
第三步:配置这个Bean,它拿到的是就是SessionFactory

第四步:测试(拿到SessionFactory就算是配置成功 )
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration
public class FactoryBeanTest {
@Autowired
private SessionFactory factory;
@Test
public void testname() throws Exception {
System.out.println(factory);
}
}

面试题:说一下BeanFactory与FactoryBean的区别

BeanFactory接口,顶层父工厂,容器,获取bean的实例
FactoryBean 接口,实例化不能通过默认无参构造方法获取的bean
通过子类的getObject方法来返回实例,如SessionFactory
如果一个类没有构造方法,但是可以用其它方式拿到它的对象,就可以用FactoryBean
多用于Spring的框架集成
org.springframework.orm.hibernate3.LocalSessionFactoryBean
集成hibernate3.x
Org.springframework.orm.hibernate4.LocalSessionFactoryBean
集成hibernate4.x

3.3使用静态简单工厂
在这里插入图片描述在这里插入图片描述3.4集成实例简单工厂
在这里插入图片描述在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值