文章插图
(2)静态工厂创建(调用静态方法创建)
调用UserFactory类的静态createUser方法创建名为user的对象,放入容器<bean name="user" class="cn.itcats.UserFactory" factory-method="createUser"></bean>
(3)实例工厂创建(调用非静态方法创建)——需要配置两个bean,因为无法通过类名调用非静态方法<bean name="user2" factory-bean="userFactory" factory-method="createUser"></bean> <bean name=“userFactory” class=“cn.itcats.UserFactory”></bean>
3.4、spring注入方式(1)set方式注入(重点)————值类型用value注入 引用类型用ref注入
文章插图
(2)构造方法注入
文章插图
函数注入
(3)p名称空间注入———实际上set注入,spring特有,为了简化<property>写法
1、applicationContext.xml中<beans>标签头部导入p命名空间
xmlns:p="http://www.springframework.org/schema/p"
2、书写格式:值类型注入—— p:属性名="值" 引用类型注入—— p:属性名-ref="引用的<bean> name属性"把Run类中的name属性值设置为haha,age属性设置为20,引用属性hello引用<bean name="hello" class="..."></bean>
<bean name="run2" class="cn.itcats.thread.Run" p:name="haha" p:age="20" p:hello-ref="hello"></bean>
(4)spel注入: spring Expression Language spring表达式语言
<bean name="runSpel" class="cn.itcats.thread.Run"><!-- 取bean标签中name为"user"中property为"name"中的value值 --!><property name="name" value=https://www.isolves.com/it/cxkf/kj/2020-11-03/"#{user.name}">
SpEL特性:(1)、使用Bean的ID来引用Bean;(2)、调用方法和访问对象的属性;(3)、对值进行算术、关系和逻辑运算;(4)、正则表达式匹配;(5)、集合操作关于spel https://www.cnblogs.com/goodcheap/p/6490896.html
复杂类型注入
1.array数组的注入
文章插图
2.list集合的注入
文章插图
3.map集合的注入
文章插图
4.properties的注入
文章插图
4、防止创建多个applicationContext取值/并指定记载spring配置文件的位置——web.xml1、需要导入包spring-web
2、在web.xml中配置监听器
文章插图
5、使用注解方式代替配置文件(官方推荐使用注解) 1.在applicationContext.xml中书写指定扫描注解
文章插图
2.在类中书写Component
文章插图
注意:假如不写括号内的值(即name或id),默认使用类名首字母小写作为搜索,为什么意思呢?
比如Student类中使用了@Component 没有书写括号和值,那么默认搜索id或name为student 。
3.指定对象的作用范围Scope
文章插图
声明Student类对象为多例 下面是对singleton和prototype的一些补充
singleton作用域:当把一个Bean定义设置为singleton作用域是,Spring IoC容器中只会存在一个共享的Bean实例,并且所有对Bean的请求,只要id与该Bean定义相匹配,则只会返回该Bean的同一实例 。值得强调的是singleton作用域是Spring中的缺省作用域 。
prototype作用域:prototype作用域的Bean会导致在每次对该Bean请求(将其注入到另一个Bean中,或者以程序的方式调用容器的getBean()方法)时都会创建一个新的Bean实例 。根据经验,对有状态的Bean应使用prototype作用域,而对无状态的Bean则应该使用singleton作用域 。对于具有prototype作用域的Bean,有一点很重要,即Spring不能对该Bean的整个生命周期负责 。具有prototype作用域的Bean创建后交由调用者负责销毁对象回收资源 。简单的说:
推荐阅读
- Spring Cloud微服务分布式物联网平台前后端分离源码
- ThinkPHP框架——实现定时任务,定时更新、清理数据
- SpringBoot如何用Session共享实现分布式部署?
- 什么是层次型测试框架?探讨一下分层测试与传统测试方法的差别
- SpringBoot运行源码分析:Spring应用上下文准备
- spring-boot-route 使用aop记录操作日志
- SpringCloud Gateway动态路由之Nacos
- ReconSpider:一款功能强大的高级OSINT框架
- Hadoop框架:NameNode工作机制详解
- 我们为什么选择Vuetify作为前端框架