spring5框架新功能(尚硅谷spring5)
–1.整个spring5框架代码基于java8,运行时兼容java9,许多不建议使用的类和方法在代码库中删除;
–2.spring5.0框架自带了通用的日志封装,步骤:
①.导入jar包;
②.创建log4j2.xml配置文件
–3.spring5核心框架容器支持@Nullable注解
(1)@Nullable注解可以使用在方法上面,属性上面,参数上面,表示方法返回值可以为空,属性值可以为空,参数值可以为空;
(2)注解在方法上面,方法返回值可以为空;
(3)注解使用在方法参数里面,方法参数可以为空
(4)使用在属性上,属性可以为空
即不报空指针
–4.spring5核心容器支持函数式风格GenericApplicationContext
new之后调用refresh()、registerBean()
registerBean()三个参数第一个类似于注入时的id,第二个注入的类.Class,第三个是一个函数式接口 () -> new XXX();
类似于多一种注入bean方式?
–5.spring5支持整合JUnit5
Junit4涉及注解:
@RunWith(SpringJunit4ClassRunner.class):单元测试框架
@ContextConfiguration(“classpath:xxx.xml”):加载配置文件
Junit5注解:
@ContextConfiguration同上
@ExtendWith(SpringExtension.class):类似于RunWith
SpringJunitConfig(locations = “classpath:xxx.xml”):效果等同于上面两个注解
其他笔记:计算一个数是否有奇数因子,可以使用n&(n-1)==0来进行判断,题目是计算一个整数是否可以用连续的整数进行表示。
今日到此为止,明日继续努力!!!
补充一个动态代理的知识,防止忘记
Proxy.newProxyInstance(XXX.class.getClassLoader(),interfaces, new InvocationHandler() {
@Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
return null;
}
})
Proxy.newProxyInstance()方法:
里面有三个参数,第一个是类加载器,第二个是要动态代理的接口,是一个Class[]数组,第三个就是InvocationHandler接口
InvocationHandler:实现或者使用匿名内部类方式来重写invoke()方法,用来表示你要代理什么
invoke方法有三个参数:第一个是代理类实例,第二个是方法,第三个就是参数
Method.invoke()就是调用你实现的方法,然后在方法执行前后加上你增强的代码,动态代理就实现了,里面的参数时你的实例和你的参数