
一直在用Spring,其实对其了解甚少,刚去了解了一下Spring中Bean的命名问题以及ref和idref之间的区别,略作记录,以备后查。
Spring中Bean的命名
1、每个Bean可以有一个id属性,并可以根据该id在IoC容器中查找该Bean,该id属性值必须在IoC容器中唯一;
2、可以不指定id属性,只指定全限定类名,如:
<bean class="comzyhspring3helloStaticBeanFactory"></bean>
此时需要通过接口getBean(Class<T> requiredType)来获取Bean;
3、如果不指定id,只指定name,那么name为Bean的标识符,并且需要在容器中唯一;
4、同时指定name和id,此时id为标识符,而name为Bean的别名,两者都可以找到目标Bean;
5、可以指定多个name,之间可以用分号(“;”)、空格(“ ”)或逗号(“,”)分隔开,如果没有指定id,那么第一个name为标识符,其余的为别名;若指定了id属性,则id为标识符,所有的name均为别名。如:
<bean name="alias1 alias2;alias3,alias4" id="hello1" class="comzyhspring3helloHelloWorld">
<constructor-arg index="0" value="Rod"></constructor-arg>
</bean>
此时,hello1为标识符,而alias1,alias2,alias3,alias4为别名,它们都可以作为Bean的键值;
6、可以使用<alias>标签指定别名,别名也必须这个字符串。
通过reflect应该可以实现
不过既然是EJB 就应该尽力遵守EJB的规范 JPA已经简化了ORM 的相关 *** 作 OOP的设计理念 去关心表名和列名 不是又是又回到解放前去了吗
如果是JPQL不能满足用户需求 或者是有过大的性能开销 需要在查询上作优化 我想这样的情况应该是很少的 适当的调优是不错的 既然少 那变化也应该是少的 自己定义的实体 看看就好了
class: 告诉容器注册的是什么类,要写出注册组件的全类名。
id: 这个组件的唯一标识(相当于你的身份z号)。
property : 为Student对象的属性赋值
还有种写法: 把 id 换成 name
区别:
1、 命名规范 :id属性命名必须满足xml命名规范,而name属性命名可以不用遵守。不论是id属性还是name属性在创建bean的时候不遵守命名规范会抛出异常。
2、 唯一性 。id属性命名必须严格遵守唯一原则,否则会报错;name属性命名可以不必遵守唯一原则,在创建实例对象的时候后面一个bean会覆盖前面一个bean。
开发的时候尽量都使用id属性配置bean,严格的检测能让程序更加良好。
这是spring自动扫面bean 默认命名的约定,如果前两位是大写字母 其默认名和类名一致 ,也就是说,改成如下
@Component
public class DBUtil { }
@Autowired
public void setDataSource( @Qualifier("DBUtil")DBUtil dataSource) {//修改 @Qualifier("DBUtil") thisdataSource = dataSource;
}
或者给DBUtil添加bean name
@Component("dBUtil")
public class DBUtil
以上就是关于Spring中Bean的命名问题及ref和idref之间的区别全部的内容,包括:Spring中Bean的命名问题及ref和idref之间的区别、ejb3.0中如何通过一个实体bean获取对应的表名和列名、Spring bean的id、name和class等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)