我们之前用的就一直是无参构造器实现实例化,虽然没有在类中写构造器,但是每个类都会有一个默认的无参构造器
相比于无参构造器,我们只需要传入参数就可以了
我们可以通过constructor-arg标签来传递参数
当然传递自建的类也是可以的
这里也可以把类的传参看作是依赖注入的构造方法
静态工厂实现实例化比较的简单,因为方法是静态的,不需要创建一个对象去调用方法,因此我们可以直接通过我们的factorybean去实例化
这里相当于我们要先实例化我们的工厂对象,通过这个对象在调用我们的方法,类似于要先new一个对象才能去调用方法
我们首先写一个类实现FactoryBean接口,之后重写一下里面的方法
我们可以看到getobject方法就和我们之前的工厂中获取bean对象的方法相同,里面只要写上我们想获取的bean
public class BeanFactory3 implements FactoryBean {@Overridepublic UserDao getObject() throws Exception {return new UserDaoImpl();}@Overridepublic Class> getObjectType() {return UserDao.class;}
}
这个的xml配置的非常的简短
或许你可能会有疑问,这样我们通过getbean获取的bean对象不是应该是BeanFactory3吗,为什么实际上我们获取的还是UserDaoImpl
实际上我们可以通过断点调试看一下
我们会发现这样一个缓存,原来我们实际上调用的是这个缓存的内的键值
而且这个缓存是只有当我们的bean实例化时才会产生,相当于是一种延时,可以减少我们内存的花销,使得性能更优
那么如果我们还是想调用BeanFactory呢
我们可以在bean的名字前加一个&
ApplicationContext applicationContext=new ClassPathXmlApplicationContext("applicationContext.xml");Object userDao3 = applicationContext.getBean("&UserDao3");System.out.println(userDao3);
可以看到我们取到的就是BeanFactory
没用的小知识又增加了呢
上一篇:Spring Data JPA
下一篇:决策树学习报告