再次简单说一下 try catch / throw new exception /throws exception的区别
try catch是在方法内部对异常进行处理,并且可以选择将功能继续执行. throw new exception是在方法内部,将异常抛出,使其上一级对异常进行处理. 而throws exception则是标识该方法内部可能有异常 使上一级对该异常进行处理.增加代码的健全性.
Propagation.REQUIRED ->事物传播机制->
当方法A调用方法B,方法B需要有独立的事物时,需要使用此事物传播机制.然而.当A与B在同一类时,此时B的独立事物是不生效的.解决方式一是:需要将A和B独立于两个不同的类中;二是如果两者处于同一业务层,则需要获取spring中的该对象的代理对象,然后调用方法B.如springApplicationUtils.getApplication().getBean(name)获取该业务类,然后进行调用.
- /**
- * 获取spring容器,以访问容器中定义的其他bean
- */
- @Component
- public class SpringContextUtil implements ApplicationContextAware {
- // Spring应用上下文环境
- @Autowired
- private ApplicationContext applicationContext;
- /**
- * 实现ApplicationContextAware接口的回调方法,设置上下文环境
- *
- * @param applicationContext
- */
- public void setApplicationContext(ApplicationContext applicationContext) {
- this.applicationContext = applicationContext;
- }
- /**
- * @return ApplicationContext
- */
- public ApplicationContext getApplicationContext() {
- return this.applicationContext;
- }
- /**
- * 获取对象 这里重写了bean方法,起主要作用
- *
- * @param name
- * @return Object 一个以所给名字注册的bean的实例
- * @throws BeansException
- */
- public Object getBean(String name) throws BeansException {
- return applicationContext.getBean(name);
- }
- }
/**
* 获取spring容器,以访问容器中定义的其他bean
*/
@Component
public class SpringContextUtil implements ApplicationContextAware {
// Spring应用上下文环境
@Autowired
private ApplicationContext applicationContext;
/**
* 实现ApplicationContextAware接口的回调方法,设置上下文环境
*
* @param applicationContext
*/
public void setApplicationContext(ApplicationContext applicationContext) {
this.applicationContext = applicationContext;
}
/**
* @return ApplicationContext
*/
public ApplicationContext getApplicationContext() {
return this.applicationContext;
}
/**
* 获取对象 这里重写了bean方法,起主要作用
*
* @param name
* @return Object 一个以所给名字注册的bean的实例
* @throws BeansException
*/
public Object getBean(String name) throws BeansException {
return applicationContext.getBean(name);
}
}
使用
- @Autowired
- private SpringContextUtil springContextUtil;
- springContextUtil.getApplicationContext().getBean(this.getClass());
@Autowired
private SpringContextUtil springContextUtil;
springContextUtil.getApplicationContext().getBean(this.getClass());