本文最后更新于 695 天前,其中的信息可能已经有所发展或是发生改变。
前言
那么第二天的主要目标是学习注解开发,并且今天的作业没有目标,按照老师的代码直接模仿就行
课程文章:Sping第二天|胖叔讲JAVA
项目代码已经全部托管到github
问题与解决方案
@value+el表达式注入属性,需要给操作的字段生成setter和getter方法
首先是第一个出现的问题
在我测试el注入的代码时
public class DITest {
@Test
public void test(){
ApplicationContext context = new ClassPathXmlApplicationContext("classpath:annotation/di-value-bean.xml");
User user = context.getBean(User.class);
System.out.println(user);
}
@Test
public void test2(){
ApplicationContext context = new ClassPathXmlApplicationContext("classpath:annotation/di-value-bean.xml");
Role role = context.getBean(Role.class);
System.out.println(role);
}
报错EL1008E: Property or field ‘name’ cannot be found on object of type ‘alantorp.annotation.di.value.User’ – maybe not public or not valid?
并且是在我添加Role类和test2方法后出现的
经过删除文件和修改内容的排查后发现,在Role类里的这段代码的user系统显示Cannot resolve variable ‘user’
@Value("#{user.name+'的角色'}")
private String des;
但是进到配置文件里,配置文件显然以及注册并命名了
其实并不是没有找到,而是User类中name属性是private,并且没有提供get方法,所以IOC无法给你user的name属性,于是我在User中添加get方法,然后重新测试
ok,问题解决
properties读出的数据显示???
在我进行Test3的测试时,name显示的数据出现乱码,其他正常,其中只要name为中文,如图
很好猜到这是idea的编码格式问题,仔细一看果然不是UTF-8
那么就进入到idea的setting里更改file编码
并且删除原有文件,重新编写即可
整合junit5空指针错误
同这篇文章的问题一样spring整合junit5单元测试框架,是因为导的包不对
import org.junit.Test;//4.13
import org.junit.jupiter.api.Test;//5.7.2
这里需要导入junit5.7.2,我却导入了4.13,更换后测试正常