Spring day2

1.增强

在Spring框架中,增强(Advices)是面向切面编程(AOP)中的一个关键概念,用于定义切面中的具体行为。增强可以在目标方法的执行前、执行后或发生异常时被触发,它们可以拦截和修改方法的执行流程。

1.异常抛出增强

<aop:config>
   <aop:aspect  ref="增强方法所在的Bean">
	<aop:after-throwing method="增强处理方法"pointcut-ref="切入点id"  throwing="e" />
   </aop:aspect>
</aop:config>

2.最终增强

<aop:config>
	<aop:aspect ref="增强方法所在的Bean">
		<aop:after method="增强处理方法" pointcut-ref="切入点id" />
	</aop:aspect>
</aop:config>

3.环绕增强

<aop:config>
	<aop:aspect ref="增强方法所在的Bean">
		<aop:around method="增强处理方法" pointcut-ref="切入点id" />
	</aop:aspect>
</aop:config>

2.依赖注入

依赖注入(Dependency Injection,DI)是一种核心的特性,它允许对象之间的依赖关系由框架来管理和注入。通过依赖注入,可以解耦对象之间的紧耦合关系,提高代码的可测试性、可扩展性和可维护性。

p命名空间注入

在Spring的XML配置文件中,p命名空间可以用于简化属性注入的配置。通过使用p命名空间,可以直接在XML配置文件中使用类似属性赋值的方式来进行属性注入。

 注意:配置文件中使用p命名空间时,需要先添加p命名空间的声明                 xmlns:p="http://www.springframework.org/schema/p"

<bean id="唯一标识" class="类的全路径"
	p:"属性1"="注入的值" p:"属性2"="注入的值"  />
<bean id="唯一标识" class="类的全路径"
	p:属性-ref="注入的Bean" />

不同数据类型注入

 3.使用注解实现Spring IoC

  • 注意:部分注解不全面
  • @Component: 用于标记一个类为可被Spring自动扫描、识别和创建对象的组件。
  • @Repository: 用于标记持久层(DAO)组件。
  • @Service: 用于标记服务层(Service)组件。
  • @Controller: 用于标记控制器层(Controller)组件。
  • @Configuration: 用于标记配置类,定义Bean的配置信息。
  • @Bean: 用于在配置类中定义Bean对象,并将其添加到Spring容器中。
  • @Qualifier: 用于指定特定的依赖对象。当存在多个类型兼容的bean时,可以结合@Autowired一起使用,通过指定bean的名称或自定义的限定符(Qualifier)来选择注入的bean。

  • @Autowired: 用于自动装配依赖对象。可以标记在构造函数、属性、Setter方法或参数上。默认情况下,它要求依赖对象必须存在,可以通过required属性设置为false来标记依赖对象为可选

1.示例:与在XML配置文件中编写    <bean id="userDao" class="dao.impl.UserDaoImpl" />    等效

@Repository("userDao")
public class UserDaoImpl implements UserDao {
	…
}

2.@Autowired注解实现Bean的自动装配

@Service("userService")
public class UserServiceImpl implements UserService {
	@Autowired
	@Qualifier("userDao")
	private UserDao dao;   ------->为dao属性注入名为userDao的Bean
	……
}

3.使用@Resource注解实现组件装配

@Service("userService")
public class UserServiceImpl implements UserService {
	@Resource
	private UserDao dao;   ----->查找名为dao的Bean,并注入给dao属性
	……
}
@Service("userService")
public class UserServiceImpl implements UserService {
	@Resource(name="userDao")
	private UserDao dao;   ----->为dao属性注入名为userDao的Bean

	……
}

4.Java标准注解完成装配

@Service("userService")
public class UserServiceImpl implements UserService {
	@Resource(type = UserDaoImpl.class)
	private UserDao dao;   ----->用于显示指定依赖的Bean的具体类型
	……
}

上面对比@Autowired注解和@Resource注解 @Autowired是Spring提供的注解,@Resource是Java提供的 在不指定任何参数且不配合其他注解时,@Autowired注解会优先按Bean的类型进行装配,@Resource注解则是优先按Bean的名称进行装配

 4.注解实现Spring AOP

  1. @Aspect: 用于标记一个类为切面类,声明该类中包含切面逻辑的方法。

  2. @Pointcut: 用于定义切点,指定在哪些连接点(Join Point)上应用切面逻辑。切点表达式可以通过方法定义,然后在通知中通过方法名引用。

  3. @Before: 在目标方法执行之前执行的通知。可以用于执行一些前置操作。

  4. @AfterReturning: 在目标方法成功执行之后执行的通知。可以获取到方法的返回值,进行必要的处理。

  5. @AfterThrowing: 在抛出异常时执行的通知。可以捕获方法抛出的异常进行处理。

  6. @After: 无论目标方法是否正常执行,最终都会执行的通知。

  7. @Around: 在目标方法执行前后执行的通知。可以控制目标方法的执行,包括可以在方法执行前后进行一些操作。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值