BeanFactory和ApplicationContext的区别+部分Spring的使用
BeanFactory和ApplicationContext的区别
ApplicationContext 方式加载:创建容器的同时 容器初始化,容器所有的bean创建完毕
Spring容器中获取一个对象 通过类型直接获取
BeanFactory 方式加载:创建容器对象,BeanFactory当调用getBean获取响应对象是才创建对象
Spring容器中获取一个对象 通过类型直接获取
这两个区别是一个容器加载的时候实例化对象,一个是在使用的时候才实例化对象。
静态工厂注入:
1、创建静态工厂类,定义一个工厂方法,new一个对象
2、<!-- 注册静态工厂 -->
<bean class="com.sxt.factory.UserFactory" factory-method="getInstance" id="user"/>
在一些第三方框架使用过程中,可能不得不使用静态工厂注入或者实例工厂注入
HttpUrlConnection、HttpClient、OkHttp
动态工厂注入:
1、创建动态工厂类,定义一个工厂方法,new一个对象
2、
<!-- 实现动态工厂 -->
<bean class="com.sxt.factory.UserFactory" id="userFactory"/>
<bean factory-bean="userFactory" factory-method="getInstance" id="user"/>
属性注入
1、构造注入
创建有参构造方法,同时必须提供无参构造方法
<bean class="com.bb.pojo.User">
<!-- 通过构造注入的方式 初始化属性 -->
<constructor-arg name="id" value="1001"/>
<constructor-arg name="userName" value="张三"/>
<constructor-arg name="address" value="深圳"/>
</bean>
2、设置注入
有参构造方法不是必须的了,无参方法是必须的!!!
set方法注入就是利用对象属性的set方法给属性赋值,实际上,相当于首先使用无参构造方法创建一个Book对象,然后调用对象中的set方法给各个属性赋值。
设置注入必须添加对应的set()的方法
<bean class="com.bb.pojo.User">
<!-- 通过设值注入的方式 初始化属性 -->
<property name="id" value="1003"/>
<property name="userName" value="王五"/>
<property name="address" value="固戍"/>
</bean>
P名称空间注入
p名称空间注入本质上还是set方法注入,只是写法不同(注意:p名称空间注入,需要有无参构造方法)。
<bean class="com.bb.pojo.User" p:id="1004" p:userName="赵六" p:address="西乡"/>
对象注入
<bean class="com.bb.pojo.Cat" id="myCat">
<property name="nick" value="小黑"/>
<property name="color" value="黄色"/>
</bean>
数组和集合注入
数组和集合的注入方式是一致的,无论是基本数据类型还是一个引用,注入方式都是一样。 首先声明一个对象,对象中包含集合和数组。
<!-- 数组类型 -->
<array>
<value>LOL</value>
<value>CF</value>
<value>DNF</value>
</array>
</property>
<property name="cats">
<!-- List类型 -->
<list>
<ref bean="myCat"/>
<ref bean="myCat"/>
<ref bean="myCat"/>
</list>
</property>
Map注入
<property name="maps">
<!-- map类型 -->
<map>
<entry key="c1" value-ref="myCat"></entry>
<entry key="c2" value-ref="myCat"></entry>
<entry key="c3" value-ref="myCat"></entry>
</map>
</property>
Props注入
<property name="props">
<props>
<prop key="url">http://192.168.0.135</prop>
<prop key="userName">admin</prop>
<prop key="password">123</prop>
</props>
</property>
控制反转注入
1·在spring容器中加载dao层的实现类
<!-- 配置Dao -->
<bean class="com.bb.dao.impl.UserDaoImpl" id="userDaoImpl"/>
2·在业务层的实现类中使用set()方法注入dao层实现类
<!-- 配置service -->
<bean class="com.bb.service.impl.UserServiceImpl" id="userServiceImpl">
<property name="dao" ref="userDaoImpl"/>
</bean>
3·在控制层中使用set()方法注入service层实现类
<!-- 配置controller -->
<bean class="com.bb.controller.UserController">
<property name="userService" ref="userServiceImpl"/>
</bean>
JavaConfig配置(Java代码+注解)
@Configuration:表示该java类就是一个配置类相对于applicationContext.xml(放在类上)
@Bean("name"):相对于我们在applicationContext.xml文件中的bean标签 name默认的是方法名称(放在方法上)
JavaConfig + @Profile配置
@Profile:Spring中提供实现动态生成相应的bean
xmlConfig + @Profile
<!-- profile配置 注意写在文件的底部 -->
<beans profile="dev">
<bean class="com.bb.pojo.DataSource">
<!-- 通过设值注入的方式 -->
<property name="url" value="http://dev..."/>
<property name="username" value="admin"/>
<property name="password" value="123456"/>
</bean>
</beans>
xmlConfig + annotation
<!-- 开启扫描、开启注解 -->
<context:component-scan base-package="com.bb.pojo"/>
@Component("user")等价 配置文件中<bean>标签 默认的name是类名首字母小写,一般用在身份不明的组件上
<bean class="com.bb.pojo.User" name="user"/>
@Controller 一般在控制层使用的注解
@Service 一般在业务层使用的注解
@Repository 一般在dao层使用的注解
JavaConfig + annotation
@ComponentScan主要就是定义扫描的路径从中找出标识了需要装配的类自动装配到spring的bean容器中
总结一下@ComponentScan的常用方式如下
自定扫描路径下边带有@Controller,@Service,@Repository,@Component注解加入spring容器
通过includeFilters加入扫描路径下没有以上注解的类加入spring容器
通过excludeFilters过滤出不用加入spring容器的类
自定义增加了@Component注解的注解方式
BeanFactory和ApplicationContext的区别+部分Spring的使用的更多相关文章
- Spring中的BeanFactory和ApplicationContext的区别
我用一个例子去测试BeanFactory和ApplicationContext的区别 首先建立一个bean public class User { //声明无参构造,打印一句话,监测对象创建时机 pu ...
- Spring中BeanFactory与ApplicationContext的区别
BeanFactory:Bean工厂接口,是访问Spring Bean容器的根接口,基本Bean视图客户端.从其名称上即可看出其功能,即实现Spring Bean容器的读取. ApplicationC ...
- BeanFactory 和 ApplicationContext的区别
今天在网上查资料无意中看到这一行代码 BeanFactory factory = new ClassPathXmlApplicationContext("applicationContext ...
- BeanFactory和ApplicationContext的区别(Bean工厂和应用上下文)
https://blog.csdn.net/qq_20757489/article/details/88543252 https://blog.csdn.net/pythias_/article/de ...
- 面试还不知道BeanFactory和ApplicationContext的区别?
接口 BeanFactory 和 ApplicationContext 都是用来从容器中获取 Spring beans 的,但是,他们二者有很大不同 我看到过很多问 BeanFactory 和 App ...
- BeanFactory和ApplicationContext的区别
1.BeanFactory和ApplicationContext的异同点: 相同点: 两者都是通过xml配置文件加载bean,ApplicationContext和BeanFacotry相比 ...
- 【Spring】3、BeanFactory 和 ApplicationContext的区别
转自:http://blog.csdn.net/intlgj/article/details/5660587 在spring中,两个最基本最重要的包是 org.springframework.bean ...
- 阶段3 2.Spring_03.Spring的 IOC 和 DI_5 BeanFactory和ApplicationContext的区别
核心容器的两个接口.ApplicationContext和BeanFactory 怎么知道对象被创建了呢 我们只需要在实现类里面构造函数内打印输出一段话 然后再这里加上一个断点 运行程序,光标停在这个 ...
- Spring中BeanFactory和ApplicationContext的区别
1. BeanFactory负责读取bean配置文档,管理bean的加载,实例化,维护bean之间的依赖关系,负责bean的生命周期. 2. ApplicationContext除了提供上述BeanF ...
随机推荐
- linux core文件的打开和分析
1. core文件生成打开方式: ulimit -c unlimited echo "1" > /proc/sys/kernel/core_uses_pid 看下服务器上是否 ...
- Java并发编程——线程池
本文的目录大纲: 一.Java中的ThreadPoolExecutor类 二.深入剖析线程池实现原理 三.使用示例 四.如何合理配置线程池的大小 一.Java中的ThreadPoolExecutor类 ...
- vue中使用proxy配置不同端口和ip接口
问题描述: 使用vue-cli创建的项目,开发地址是localhost:8080,由于后台开发不同的模块,导致每个模块请求的ip和端口号不一致 例如:http://192.168.10.22:8081 ...
- 移动端iOS点击闪烁
移动端iOS点击闪烁 1. $("#id").bind("touchstart click",function(e){ 2. e.stopPropagation ...
- python之file 方法
file 对象使用 open 函数来创建,下表列出了 file 对象常用的函数: 1 file.close() close() 方法用于关闭一个已打开的文件.关闭后的文件不能再进行读写操作, 否 ...
- DA_06_iptables 与 firewalld 防火墙
8.1 防火墙管理工具 防火墙作为公网与内网之间的保护屏障,在保障数据的安全性方面起着至关重要的作用.主要功能都是依据策略对穿越防火墙自身的流量进行过滤.防火墙策略可以基于 流量的源目地址.端口号.协 ...
- CSS相对定位与绝对定位详解
相对定位和绝对定位,不改变元素的大小形状,只改变元素的位置. 相对定位和绝对定位是通过position属性来控制的,position属性的值为下面几种: 值 描述 absolute 使元素绝对定位,相 ...
- 【异常记录(十)】 接口调用,提示跨域 Cross-domain calling interface, Access-Control-Allow-Origin
头的 Access-Control-Allow-Origin(允许访问的域) 改成 * : Response.AddHeader("Access-Control-Allow-Origin&q ...
- Elasticsearch中Mapping
映射(Mapping) 概念:创建索引时,可以预先定义字段的类型以及相关属性.从而使得索引建立得更加细致和完善.如果不预先设置映射,会自动识别输入的字段类型. 官方文档(字段数据类型):https:/ ...
- zencart批量插入TEXT文本属性attributes
有时候上传的产品与多级分类比较多,在后台添加文本属性如Name,Number等需要顾客自定义的内容就比较费神了.现在只需将以下代码保存为insert_attributes.php,变量$options ...