spring面试题

Aspectj开发和AOP传统开发最大的区别是什么
AOP开发中通知类需实现对应的通知接口。
aspectj开发中的通知类可以不实现任何接口,只需定义功能方法即可
aspectj开发通知类型比AOP开发多了最终通知。


传统aop有哪几种通知类型?aspectJ有哪几种通知类型?
传统aop,支持增强advice的通知类型有5种:
1.前置通知 org.springframework.aop.MethodBeforeAdvice 方法before
2.后置通知 org.springframework.aop.AfterReturningAdvice 方法afterReturning
3.环绕通知 org.aopalliance.intercept.MethodInterceptor
方法invoke 参数MethodInvocation.proceed() //执行目标方法
4.异常通知 org.springframework.aop.ThrowsAdvice
5.引介通知
aspectJ
1.前置通知 Before
2.后置通知 AfterReturning
3.环绕通知 Around
4.抛出通知 AfterThrowing
5.引介通知 DeclareParents
6.最终通知After 不管是否异常,该通知都会执行


jdk动态代理与静态代理的区别,jdk动态代理与cglib动态代理的区别?
静态代理,AspectJ实现,将切面代码直接编译到java类文件中
动态代理,将切面代码进行动态织入实现(spring采用,技术为:jdk动态代理 和 CGLIB动态字节码增强技术)
JDK动态代理:在JVM内部动态生成class字节码对象(Class对象),只针对于实现接口的类代理
CGLIB动态代理:(Code Generation Library)开源项目,底层是使用一个小而快的字节码处理框架ASM,来转换字节码并生成新的类,也可以为没有实现接口的类代理


属性注入时按名称注入和类型注入的区别?
类型注入:@AutoWired ,根据数据类型注入对象,并且注入的对象需只有一个,否则框架无法识别注入哪个而报错
按名称注入:@AutoWired @Qualifier("name")或者@Resource(name="其他Bean")


jdbcTemplate查询数据的方法是什么,及其区别
//简单查询,返回一条数据一个值
T queryForObject("sql",T.class,参数...)
//复杂查询,返回一条数据,RowMapper中手动封装数据
T queryForObject("sql",RowMapper<T>,参数...)
//查询返回多条数据
List<T> query("sql",RowMapper<T>,参数...)
使用RowMapper的实现类BeanPropertyRowMapper<T>(T.class)可以实现数据自动封装
前提:实体类需提供无参public构造,bean属性名称要与表列名对应

 

posted @ 2018-07-06 21:25  滑桢  阅读(98)  评论(0编辑  收藏  举报