Spring中Bean的命名问题及ref和idref之间的区别

Spring中Bean的命名问题及ref和idref之间的区别,第1张

一直在用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等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/9514379.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-29
下一篇2023-04-29

发表评论

登录后才能评论

评论列表(0条)

    保存