首先 我们知道 Spring5 是支持java8的 那么 java8中包含的Lambda表达式 他自然也是支持的
简单说 Spring5 核心容器中支持函数式 Lambda表达式做法
这里先科普一下 之前我们接触过Spring5 方式创建对象的两种方法 分别是xml和注解,还有就是原来的new其实也可以实现,但你直接new Spring其实是不知道你这个对象被创建的 因为这是java帮你实现的 Spring 压根不知道有这么回事
但其实 new对象 也有一种方式可以在Spring中注册 我们创建一个java项目 然后引入Spring的基本依赖
然后在src下创建测试类 参考代码如下
import org.springframework.context.support.GenericApplicationContext;
public class text {
public static void main(String[] args) {
//创建一个GenericApplicationContext对象
GenericApplicationContext context = new GenericApplicationContext();
//将GenericApplicationContext对象清空
context.refresh();
//注册对象
context.registerBean(text.class,()-> new text());
}
}
这里 我们创建了一个GenericApplicationContext对象 然后先调用refresh清空一下 然后在通过他的registerBean方法创建对象
这里 我们用了个Lambda表达式的语法 简单说 就是将text类的对象 在Spring中创建了
然后 得到这个对象 相对也会有所不同 注解和xml生成的bean 名字要么定义式就已经声明了 要不就是类的首字母变为小写get bean对应名就可以找到
但这个是不能这样的
首先一种方式是用它在src下的全路径来找
例如 在src下的aop目录下的uisr包下的user
那么就是
user user = (user) context.getBean("aop.uisr.user");
System.out.println(user);
但因为我们的text就在src目录下 所以直接
text TS = (text) context.getBean("text");
System.out.println(TS);
就可以了
运行结果如下
系统简单输出了一下对象地址
第二种方式 则是在声明式直接指定他的名称
修改测试类代码如下
import org.springframework.context.support.GenericApplicationContext;
public class text {
public static void main(String[] args) {
//创建一个GenericApplicationContext对象
GenericApplicationContext context = new GenericApplicationContext();
//将GenericApplicationContext对象清空
context.refresh();
//注册对象
context.registerBean("TypeStex",text.class,()-> new text());
text TS = (text) context.getBean("TypeStex");
System.out.println(TS);
}
}
这里 改动的主要就是registerBean函数 它的第一个参数就是指定bean对象名称,只是可以不传 我们传了 TypeStex 那么就可以通过TypeStex来取到它
运行结果如下