Spring Ioc 依赖查找
2024-08-31 01:29:35
Spring ioc 有依赖查找和依赖注入,之前不太明白依赖查找是什么意思,翻了一大堆博客看了好多定义也不太清楚 ,后来看了小马哥视频,他通过代码演示,清楚地讲解了什么是 依赖查找以及几种依赖查找的方法,本文结合代码浅析一下Spring ioc的依赖查找,通过代码来更加形象的理解依赖查找。
1.根据bean名称查找:
实时查找
延时查找
1.配置xml文件
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
">
<!--实时查找-->
<bean id="User" class="thinking.in.spring.ioc.overview.domain.User">
<property name="id" value="1"/>
<property name="name" value="小明"/>
</bean>
<!--延时查找-->
<bean id="objectFactory" class="org.springframework.beans.factory.config.ObjectFactoryCreatingFactoryBean">
<property name="targetBeanName" value="User"/>
</bean>
</beans>
2.启动spring应用上下文
public class DenpendencyLookupDemo {
public static void main(String[] args) {
BeanFactory beanFactory=new ClassPathXmlApplicationContext("META-INF/dependency-Lookup-context.xml");
//时实查找
User user=(User) beanFactory.getBean("User");
System.out.println("实时查找"+user.toString());
//延时查找
ObjectFactory<User> objectFactory= (ObjectFactory<User>)beanFactory.getBean("objectFactory");
User user1=objectFactory.getObject();
System.out.println("延时查找"+user1.toString());
}
}
输出:
2.通过类型查找
单个Bean对象
集合Bean对象
/**
* 根据类型查找单个bean
* @param beanFactory
*/
private static void lookupSingleByType(BeanFactory beanFactory){ User user2 = beanFactory.getBean(User.class);
System.out.println("根据类型时实查找单一" + user2.toString());
}
/**
* 查找多个bean
*/
private static void lookupCollectionBtType (BeanFactory beanFactory){
if (beanFactory instanceof ListableBeanFactory) {
ListableBeanFactory listableBeanFactory = (ListableBeanFactory) beanFactory;
Map<String, User> users = listableBeanFactory.getBeansOfType(User.class);
System.out.println("查找多个bean" + users);
}
}
输出:
3.通过注解查找
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
">
<!--实时查找-->
<bean id="User" class="thinking.in.spring.ioc.overview.domain.User">
<property name="id" value="1"/>
<property name="name" value="小明"/>
</bean>
<!--延时查找-->
<bean id="objectFactory" class="org.springframework.beans.factory.config.ObjectFactoryCreatingFactoryBean">
<property name="targetBeanName" value="User"/>
</bean>
<bean id="superUser" class="thinking.in.spring.ioc.overview.domain.SuperUser" parent="User" primary="true">
<property name="number" value="1"/>
</bean>
</beans>
@Super注解
@Target({ElementType.TYPE}) @Retention(RetentionPolicy.RUNTIME) public @interface Super { }
SuperUser类
@Super
public class SuperUser extends User{
private String number; public String getNumber() {
return number; } public void setNumber(String number) {
this.number = number;
} @Override
public String toString() {
return "SuperUser{" +
"number='" + number + '\'' +
"} " + super.toString();
}
}
用法
/**
* 通过注解查找
* @param beanFactory
*/
private static void lookupByAnnotatonType(BeanFactory beanFactory){
if(beanFactory instanceof ListableBeanFactory){
ListableBeanFactory listableBeanFactory=(ListableBeanFactory)beanFactory;
//根据注解查找
Map<String,User> users=( Map)listableBeanFactory.getBeansWithAnnotation(Super.class);
System.out.println("查找标注@Super 所有的User集合对象"+users);
}
}
输出:
只查找出标注了@Super注解且是User类型的Bean
最新文章
- 【Linux】虚拟机安装Archlinux
- 命令查询网站是否开启CDN加速
- 微信小程序-设备
- Xcode磁盘空间大清理
- AJAX原理及XMLHttpRequest对象分析
- HDU1358:Period
- Ajax-数据格式-html
- DISC免费性格测试题
- (转)[老老实实学WCF] 第二篇 配置WCF
- Windows 端口和任务 查看 相关命令
- textarea中的空格与换行
- KMP算法 学习例题 POJ 3461Oulipo
- Excel教程(6) - 外部函数
- Java中的类变量、实例变量、类方法、实例方法的区别
- 关于回调(callback)
- Android-AnsyncTask异步任务
- paping使用来测试联通&;网站由于tcp协议导致的无法通信问题超时问题
- 在Winform开发框架中实现对数据库的加密支持(转)
- oracle sql developer怎么创建用户
- Lucene的入门
热门文章
- Mac系统常用软件
- Qt QImag图像保存、格式转换
- Java IO: 网络
- js 原生轮播图插件
- Mybatis--映射器注解
- 第一次安装vs2010无法运行程序,系统找不到exe文件,LINK : fatal error LNK1123: 转换到 COFF 期间失败: 文件无效或损坏
- POJ 2112 Optimal Milking 最短路 二分构图 网络流
- 我的python面试简历
- [PyTorch入门]之从示例中学习PyTorch
- R (Ani Katchova) ·; Eric