企业🤖AI智能体构建引擎,智能编排和调试,一键部署,支持私有化部署方案 广告
[TOC] # 构造器注入 需要User类中有这个对应的构造方法 ~~~ <!-- 将User对象交给spring容器管理 --> <bean name="user" class="studySpring.User"> <constructor-arg name="name" value="jerry"></constructor-arg> <constructor-arg name="car" ref="car"></constructor-arg> </bean> <!-- 将Car对象配置到容器 --> <bean name="car" class="studySpring.Car"> <!-- 为user类的name和age属性注入值 --> <property name="name" value="兰博基尼"></property> <property name="color" value="黄色"></property> </bean> ~~~ 如果来个构造函数重载呢? ![](https://box.kancloud.cn/7cb455d62b2a66a51e594b32b6eca3b1_1050x786.png) ~~~ <!-- 将User对象交给spring容器管理 --> <bean name="user" class="studySpring.User"> <!-- name属性:构造函数的参数名 --> <!-- index属性:构造函数的参数索引 --> <!-- type属性:构造函数的参数类型 --> <constructor-arg name="name" value="99" index="0" type="java.lang.Integer"></constructor-arg> <constructor-arg name="car" ref="car" index="1"></constructor-arg> </bean> <!-- 将Car对象配置到容器 --> <bean name="car" class="studySpring.Car"> <!-- 为user类的name和age属性注入值 --> <property name="name" value="兰博基尼"></property> <property name="color" value="黄色"></property> </bean> ~~~ # setter方法注入 普通的值类型 ~~~ <!-- 将User对象交给spring容器管理 --> <bean name="user" class="studySpring.User"> <!-- 为user类的name和age属性注入值 --> <property name="name" value="tom"></property> <property name="age" value="18"></property> </bean> ~~~ 引用类型 ~~~ <!-- 将User对象交给spring容器管理 --> <bean name="user" class="studySpring.User"> <!-- 为user类的name和age属性注入值 --> <property name="name" value="tom"></property> <property name="age" value="18"></property> <!-- 把bean的name写这就行 --> <property name="car" ref="car"></property> </bean> <!-- 将Car对象配置到容器 --> <bean name="car" class="studySpring.Car"> <!-- 为user类的name和age属性注入值 --> <property name="name" value="兰博基尼"></property> <property name="color" value="黄色"></property> </bean> ~~~ # 名称空间p和c的使用 Spring2.0以后提供了xml命名空间 首先配置文件 ![](https://box.kancloud.cn/e015265ae339b76890a61d9da6e656e2_1448x224.png) ~~~ <!-- 1.p名称空间注入 xmlns:p="http://www.springframework.org/schema/p" 2.使用p:属性完整注入 |-值类型: p:属性名="值" |-对象类型: p:属性名-ref="bean名称" --> <bean name="user1" class="studySpring.User" p:name="jack" p:age="20" p:car-ref="car"></bean> ~~~ ![](https://box.kancloud.cn/8a2142d3247d7245362bfc5107270445_1188x750.png) # spel spring expression language 是在spring3.0以后的版本提供 它类似于ognl或el表达式,它可以提供在程序运行时构造复杂表达式来完成对象属性存储及方法调用等。 Spel表达式的格式 `#{表达式}` ~~~ <bean name="user1" class="studySpring.User"> <!-- 调用bean的name为user的对象,取他的name值 --> <property name="name" value="#{user.name}"></property> <!-- 引用对象不可使用spel --> <property name="car" ref="car"></property> </bean> ~~~ # 集合属性注入 首先准备个测试类 ~~~ public class CollectionBean { // 数组类型注入 private Object[] arr; // list/set 类型注入 private List list; // map类型注入 private Map map; // properties类型注入 private Properties prop; } ~~~ 然后生成get/set/tostring等方法 ## array注入 ~~~ <!-- array注入 --> <bean name="cb" class="studySpring.CollectionBean"> <!-- 如果数组只有一个值(对象),直接使用value|ref --> <!-- <property name="arr" value="tom"></property> --> <property name="arr"> <array> <value>tom</value> <value>jerry</value> <!-- 把这个bean注入进来 --> <ref bean="user" /> </array> </property> </bean> ~~~ ## list注入 ~~~ <bean name="cb" class="studySpring.CollectionBean"> <!-- 如果list组只有一个值(对象),直接使用value|ref --> <!-- <property name="list" value="jack"></property> --> <property name="list"> <list> <value>tom</value> <value>jerry</value> <!-- 把这个bean注入进来 --> <ref bean="user" /> </list> </property> </bean> ~~~ ## map注入 ~~~ <bean name="cb" class="studySpring.CollectionBean"> <property name="map"> <map> <entry key="url" value="jdbc:mysql://crm"></entry> <!-- bean的名字为user --> <entry key="user" value-ref="user"></entry> <!-- key也可以是引用类型 --> <entry key-ref="user" value-ref="user"></entry> </map> </property> </bean> ~~~ ## properties注入 ~~~ <bean name="cb" class="studySpring.CollectionBean"> <property name="prop"> <props> <prop key="driverClass">com.jdbc.mysql.Driver</prop> <prop key="userName">root</prop> <prop key="password">root</prop> </props> </property> </bean> ~~~