1.问题描述(Spring_shizhan4ban_Chapter05应用):在自动注入FileValidator对象引用类型时报错,由于FileValidator是实体类,没有实现接口。
@Autowired
private FileValidator fileValidator;
org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'fileUploadController': Unsatisfied dependency expressed through field 'fileValidator'; nested exception is org.springframework.beans.factory.BeanNotOfRequiredTypeException: Bean named 'fileValidator' is expected to be of type 'spittr.service.FileValidator' but was actually of type 'com.sun.proxy.$Proxy73'
解决方案:spring框架AOP才用JDK动态代理只能对实现了接口的类实现动态代理,而不能针对类,我自己在搭建项目的时候没有用接口的模式,所以在应用启动时候,配置AOP事务 的时候会扫描你的service层,service层用到了Dao层的接口代理模式(spring 默认) 因为我没有采用接口模式编程,所以报错...如果不用接口模式那么 就要用CGLIB而CGLIB是针对类实现代理,(主要生成一个子类,覆盖其中的方法) 因为是继承,所以该类或方法最好不要声明成final的类...
在spring.xml(applicationContext.xml)配置中加上 <aop:aspectj-autoproxy proxy-target-class="true"/> 把cglib.jar导入工程中即可以
2.单元测试时报: 一直都有上面的警告,因为没有影响程序就没管,知道是因为少了log4j.properties的配置问题
og4j:WARN No appenders could be found for logger (org.springframework.test.context.junit4.SpringJUnit4ClassRunner).
log4j:WARN Please initialize the log4j system properly.
log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.
解决方案:将log4j.properties文件放在src目录下就可以了。(F:\ideaprojectsworkplace\gdsbc-wcxf\src\test\resources\log4j.properties)
##DEBUG < INFO < WARN < ERROR < FATAL log4j.rootLogger=info, stdout, R
log4j.appender.stdout=org.apache.log4j.ConsoleAppender log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%5p - %m%n
log4j.appender.R=org.apache.log4j.RollingFileAppender log4j.appender.R.File=firestorm.log
log4j.appender.R.MaxFileSize=100KB log4j.appender.R.MaxBackupIndex=1
log4j.appender.R.layout=org.apache.log4j.PatternLayout log4j.appender.R.layout.ConversionPattern=%p %t %c - %m%n
#DEBUG < INFO < WARN < ERROR < FATAL log4j.logger.com.codefutures=DEBUG