01-spring配置详解

1 bean元素

<!--将User对象交给spring容器进行管理  --><!-- Bean元素:使用该元素描述需要spring容器管理的对象class属性:被管理对象的完整类名.name属性:给被管理的对象起个名字.获得对象时根据该名称获得对象.  可以重复.可以使用特殊字符.id属性: 与name属性一模一样. 名称不可重复.不能使用特殊字符.结论: 尽量使用name属性.--><bean name="user" class="www.test.bean.User"></bean>

2 对象的三种创建方式

   <!--对象创建方式1-空参数构造  --><bean name="user" class="www.test.bean.User"></bean><!-- ================================================  --><!--对象创建方式2-静态工厂创建调用UserFactory的静态方法createUser方法创建名为user2的对象.放入容器--><bean name="user2" class="www.test.b_create.UserFactory"factory-method="createUser"></bean><!-- =====================================================  --><!--对象创建方式3-实例工厂创建  --><!--调用UserFactory对象的createUser2方法创建名为user3的对象.放入容器  --><bean name="user3" factory-bean="userFactory" factory-method="createUser2"></bean><bean name="userFactory" class="www.test.b_create.UserFactory" />

3 scope属性

<bean name="user" class="www.test.bean.User" scope="singleton"></bean>
<bean name="user" class="www.test.bean.User" scope="prototype"></bean>
public void fun1(){//1创建容器对象applicationContextApplicationContext ac = new ClassPathXmlApplicationContext("www/test/b_create/applicationContext.xml");//2向容器中"要"user对象User user1 = (User) ac.getBean("user");User user2 = (User) ac.getBean("user");User user3 = (User) ac.getBean("user");User user4 = (User) ac.getBean("user");//3打印userSystem.out.println(user1==user4); // singletom : true// prototype : false}

4 初始化&销毁方法

@Test//测试对象的生命周期public void fun4(){//1 创建容器对象ClassPathXmlApplicationContext ac = new ClassPathXmlApplicationContext("www/test/b_create/applicationContext.xml");//2 向容器“要”User对象User user = (User) ac.getBean("user");//3打印
        System.out.println(user);ac.close();}

5 模块化配置

<!--导入其它spring配置  -->
<import resource="www/test/b_create/applicationContext.xml"/>

6 属性的注入

 1 set方式注入

<!--set方式注入  -->
<bean name="user" class="www.test.bean.User"><!--值类型注入: 为User对象中名为name的属性注入tom作为值 --><property name="name" value="tom"></property><property name="age" value="25"></property><!-- 引用类型注入: 为car属性注入下方配置的car对象 --><property name="car" ref="car"></property>
</bean>
<!-- 将car对象配置到容器中 -->
<bean name="car" class="www.test.bean.Car"><property name="name" value="奥迪"></property><property name="color" value="黑色"></property>
</bean>

2 构造函数注入

<!-- 将car对象配置到容器中 -->
<bean name="car" class="www.test.bean.Car"><property name="name" value="奥迪"></property><property name="color" value="黑色"></property>
</bean><!-- ============================================= -->
<!-- 构造函数注入  -->
<bean name="user2" class="www.test.bean.User"><constructor-arg name="name" value="lucy"></constructor-arg><constructor-arg name="car" ref="car"></constructor-arg>
</bean>
<bean name="user3" class="www.test.bean.User"><constructor-arg name="name" index="0" value="jack"></constructor-arg><constructor-arg name="car" ref="car"></constructor-arg>
</bean>
<bean name="user4" class="www.test.bean.User"><constructor-arg name="name" index="1" value="jack"></constructor-arg><constructor-arg name="car" ref="car"></constructor-arg>
</bean>
<bean name="user5" class="www.test.bean.User"><constructor-arg name="name" index="0" type="java.lang.Integer" value="888"></constructor-arg><constructor-arg name="car" ref="car"></constructor-arg>
</bean>

3 p 名称空间

<!-- p名称空间注入, 走set方法
1.导入P名称空间  xmlns:p="http://www.springframework.org/schema/p"
2.使用p:属性完成注入|-值类型: p:属性名="值"|-对象类型: p:属性名-ref="bean名称"-->
<bean name="user6" class="www.test.bean.User" 
p:name="jerry" p:age="15" p:car-ref="car"></bean>

4 spel注入

<!-- 
spel注入: spring Expression Language sping表达式语言
-->
<bean name="user7" class="www.test.bean.User"><property name="name" value="#{user6.name}"></property><property name="age" value="#{user.age}"></property><property name="car" ref="car"></property>
</bean>

7 复杂类型的注入

<!-- 复杂类型的注入 -->
<bean name="cb" class="www.test.bean.CollectionBean"><!-- 如果数组中只准备注入一个值(对象),直接使用value|ref即可 --><!-- <property name="arr" value="tom"></property> --><!-- <property name="arr" ref="car"></property> --><!-- array注入,多个元素注入 --><property name="arr"><array><value>tom</value><value>jerry</value><ref bean="user4" /></array></property><!-- 如果List中只准备注入一个值(对象),直接使用value|ref即可 --><!-- <property name="list" value="jack"></property> --><!-- <property name="list" ref="user"></property> --><!-- list注入,多个元素注入 --><property name="list"><list><value>jack</value><value>lisi</value><value>zhangsan</value><ref bean="user"/></list></property><!-- map类型注入 --><property name="map"><map><entry key="url" value="jdbc:mysql:///spring"></entry><entry key="user" value-ref="user6"></entry><entry key-ref="user2" value-ref="user" ></entry></map></property><!-- prperties 类型注入 --><property name="prop"><props><prop key="url">jdbc:mysql:///spring</prop><prop key="class">com.mysql.jdbc.Driver</prop><prop key="user">root</prop><prop key="password">root</prop></props></property></bean>

 

转载于:https://www.cnblogs.com/jepson6669/p/8536356.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/250858.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Vite+Vue3页面空白、图标不显示问题解决

页面空白问题 由于项目部署在子文件夹下&#xff0c;因此需要配置vite.config.js const config {base: ./, }el-icon图标不显示、打包时mkdir无权限 在控制台Network看字体图标的请求&#xff0c;发现地址多了_assets&#xff0c;本以为需要重新配置publicDir&#xff0c;后…

javascript --- 自定义数组的反序函数

想写一个自定义的_reverse函数,其作用是将传入的数组进行部分反序. 效果如下: 输入[1,2,3,4,5,6,7,8,9] 第一个将2~4个位置的数字反序 第二个将2~6个位置的数字反序. // js function _reverse(arr, s, e) {arr arr.join().slice(0,s) arr.join().slice(s,e).split().revers…

21 Fragment和短语法应用

React.Fragment jsx语法&#xff0c;相当于document.createDocumentFragment()创建文档碎片容器&#xff0c;优化渲染解决了没有根节点的问题<></>这种短语法也会声明React.Fragment但短语法不支持keyReact.Fragment只支持key属性&#xff0c;其余属性如事件等不支…

201521123004《软件工程》个人阅读作业1

task1Task2: 201521123004 林艺如 博客&#xff1a;https://www.cnblogs.com/dabaolyr/ 码云&#xff1a;https://gitee.com/dabao_lyr Task3&#xff1a;完成博客-阅读与思考 阅读参考材料&#xff0c;并回答下面几个问题&#xff1a; &#xff08;1&#xff09;回想一下你初入…

在sql当中为了让数据做缓存做with as的操作

今天看别人的代码&#xff0c;突然发现之前理解的sql的with as的用法有新的理解。 之前理解的with as只是想着做单表的union all 操作时才使用&#xff0c;今天发现在可以使用逗号做分割&#xff0c;做缓存不同的表数据。 下面的例子如下&#xff1a; WITH t1 AS (SELECT file_…

javascript --- 从数组中,找出比给定元素大一丁点的元素

目标如下: 从数组[1,3,2,4,5,6,7]中找到比第1个位置大一丁点的元素 function _findIndex(arr, j){let k -1;let key arr[j];for(let i j; i< arr.length; i) {if(arr[i] > key) {if( k ! -1){if(arr[i] < arr[k]) {k i;}} else {k i;}}}return k } let arr [1,…

22 React高阶组件

搭建服务端 yarn add express yarn add nodemon 在server目录下 npm init -y // 增加dev脚本"scripts": {"dev": "nodemon ./index.js"},引入 git HOC High Order Component 高阶组件&#xff0c;是组件的抽象HOC不是React提供的API&#xf…

AngularJS:表达式

ylbtech-AngularJS&#xff1a;表达式1.返回顶部 1、AngularJS 表达式 AngularJS 使用 表达式 把数据绑定到 HTML。 AngularJS 表达式 AngularJS 表达式写在双大括号内&#xff1a;{{ expression }}。 AngularJS 表达式把数据绑定到 HTML&#xff0c;这与 ng-bind 指令有异曲同…

省选模拟赛记录(越往下越新哦~~~)

LOG 模拟赛第一次见尼玛这么给数据范围的……开考有点困,迷迷糊糊看完了三道题,真的是像老吕说的那样,一道都不会……思考T1,感觉有点感觉,但是太困了,就先码了暴力,发现打表可以50分,于是就大力打了一波表……转身T3,码出25分的O(n^2)算法,然后不会了……去了T2,码出35分的O(n…

flutter --- 使用dio包

打开pubspec.yaml找到dependencies在最下面添加 dio: ^1.0.9ctrl s 之后,会自动下载依赖 使用: // get请求 import package:dio/dio.dart; Dio dio new Dio(); var response await dio.get("/test", data:{"id":12, "name":"marron&qu…

24 React.createRef()用法细节分析

通过React.createRef → ref对象通过元素的ref属性可以附加到React元素上一般通过构造器中给this的属性赋值一个ref&#xff0c;方便整个组件使用ref只要传递到react元素中&#xff0c;就可以利用ref的current属性访问到该真实DOM节点ref在componentDidMount和componentDidUpda…

dart --- 环境配置

1.进入官网下载SDK http://www.gekorm.com/dart-windows/ 2.运行下载的EXE文件.下一步下一步… 3.打开小黑框,输入: dart --version VSCode关于Dart的插件: DartCode Runner 插件安装好后,需重启VSCode. 新建 index.dart,输入以下代码 main () {print("Hello Dart…

25 Refs转发机制与在高阶组件中的使用

将子节点的ref暴露给父节点 16.3以上 Refs转发&#xff0c;将ref自动通过组件传递给子组件 1. 在父组件创建ref对象 2. 给子组件赋值ref 3. 通过React.forward向子组件转发ref属性 4. 父组件的ref对象指向子组件dom 5. ref参数只有在 React.forwardRef 组件内定义时可接受con…

26 JSX深度剖析与使用技巧

React对JSX的处理 React.createElement有三个参数&#xff1a;标签类型&#xff0c;属性集合&#xff0c;子元素 JSX其实是React.createElement函数调用的语法糖 JSX → 编译 → React.createElement调用形式 class App extends React.Component {render() {return (<div cl…

javascript --- 数组实用小技巧

一个数组:[a,b,c,d,e],希望满足以下2个条件: 1.当索引在第0个位置的时候,数组为[b,c,d,e],在第1个位置的时候,数组为[a,c,d,e] … 2.若索引i 和 索引 j 的值相等,则只执行1次. 效果如下: nums [1,2,3,4] nums [1,1,1,2,2,3,4] 实现如下: let nums [1,1,1,2,2,3,4]; let le…

Http的持久连接和管线化

【要点】 1. 什么是持久连接&#xff1f; 2. 什么是管线化&#xff1f; 【总结】 1.什么是持久连接&#xff1f; (keep alive模式) HTTP1.1规定了默认保持长连接&#xff08;HTTP persistent connection &#xff0c;也有翻译为持久连接&#xff09;;数据传输完成了保持TCP连接…

dart --- 简单的闭包

首先得明白下面2点: 全局变量的特点:常驻内存,污染全局变量局部变量的特点:会被垃圾回收机制回收,不会污染作用域… // 闭包.dart void main(){myClosure(){var a 0; // a是一个局部变量.函数执行完毕后将被清理return (){a;print(a);};}var fn myClosure();fn();fn();fn()…

27 JSX函数子元素的应用与思考

JSX的props.children和props本身有部分一致的特性 props.children可以传递任何类型的子元素 // 调用子元素回调 num 次&#xff0c;来重复生成组件 function Repeat(props) {// 返回一组JSXlet items [];for (let i 0; i < props.num; i) {items.push(props.children(i));…

Cascader 级联选择器

当一个数据集合有清晰的层级结构时&#xff0c;可通过级联选择器逐级查看并选择。 基础用法 有两种触发子菜单的方式 只需为 Cascader 的options属性指定选项数组即可渲染出一个级联选择器。 通过expand-trigger可以定义展开子级菜单的触发方式。 本例还展示了change事件&#…

es6 --- String.prototype.padStart

从实际出发理解. 首先看下面代码 // js var dt new Date(); console.log(dt);下面想把时间格式化,写一个dateFormat函数 // js function dateFormat(data){var dt new Date(data);var y dt.getFullYear();var m dt. getMonth() 1;var d dt.getDate();var hh dt.getHo…