spring注入问题
程序员文章站
2022-05-23 10:22:47
...
之前模拟了下spring的aop动态代理,出现了无法注入的问题,导致空指针异常
TransactionManager自定义事务管理器
@Component(value = “tm”)
public class TransactionManager {
//开启事物
@Autowired
private ConnnectionUntils connnectionUntils;
public void start() {
try {
//获取连接处已经对事务做了处理
Connection conn = connnectionUntils.getConnecting();
conn.setAutoCommit(false);
} catch (Exception e) {
e.printStackTrace();
throw new RuntimeException();
}
}
//提交事务
public void conmit(){
try {
//获取连接处已经对事务做了处理
Connection conn = connnectionUntils.getConnecting();
conn.commit();
} catch (Exception e) {
e.printStackTrace();
throw new RuntimeException();
}
}
//回滚事务
public void rollback(){
try {
//获取连接处已经对事务做了处理
Connection conn = connnectionUntils.getConnecting();
conn.rollback();
} catch (Exception e) {
e.printStackTrace();
throw new RuntimeException();
}
}
//释放资源
public void exit(){
try {
//获取连接处已经对事务做了处理
Connection conn = connnectionUntils.getConnecting();
conn.close();
} catch (Exception e) {
e.printStackTrace();
throw new RuntimeException();
}
}
}
ProxyUntis动态代理增强service层的所有方法
@Component()
public class ProxyUntis {
@Resource(name = "tm") 此处注入
private TransactionManager tm;
/**
* @param obj 传入的接口,为这个接口的子类增强
* @return
*/
public Object Proxytest(Object obj) {
Object proxy = null; //deBug 为空值
try {
proxy = Proxy.newProxyInstance(obj.getClass().getClassLoader(), obj.getClass().getInterfaces(), new InvocationHandler() {
@Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
Object invoke=null;
//传入被代理对象
try {
//开启事务 此处出现空指针异常
****tm.start(); 此处出现空指针异常****
invoke = method.invoke(obj, args);
tm.conmit();
} catch (Exception e) {
e.printStackTrace();
tm.rollback();
throw new RuntimeException("方法内部的异常");
} finally {
tm.exit();
}
return invoke;
}
});
} catch (Exception e) {
e.printStackTrace();
}
return proxy;
}
}
service层
public interface IAccountService {
void save(Account account);
void update(Account account);
void delete(Integer accountId);
Account findById(Integer accountId);
List<Account> findAll();
//转账
void tarnsfer(String soucename, String targetname, Float money);
}
至于dao层数据源测试都没有问题,pom等都没有问题
测试
@Test
public void Proxytest() {
ProxyUntis untis = new ProxyUntis();
//执行动态代理
IAccountService proxy = (IAccountService) untis.Proxytest(is);//此行出现异常
List all = proxy.findAll();
for (Account account : all) {
System.out.println(account);
}
}
@找不到解决的原因,希望大神指教
上一篇: Spring面试问题
下一篇: springboot遇到的问题
推荐阅读
-
php5.4以上版本GBK编码下htmlspecialchars输出为空问题解决方法汇总_PHP
-
解决php中Cannot send session cache limiter 的问题的方法_PHP教程
-
求教mysql批量更新有关问题
-
mysql用户自定义函数实例与部分问题解决方法
-
问一个在线支付的场景问题,如果支付宝回调通知延时怎么办?
-
div 位置的奇怪问题_html/css_WEB-ITnose
-
Spring Boot 开发个人博客--后台登录
-
第八本书 spring源码的入手
-
JS获取对象的某个CSS属性值的问题_html/css_WEB-ITnose
-
第八本书 spring源码的入手