[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>
~~~
- 基础
- 编译和安装
- scanner类(键盘录入)
- Random类(随机数)
- 数组
- 方法
- 类
- ArrayList集合
- char与int
- eclipse
- IDEA
- 变量与常量
- 常用API
- String,StringBuffer,StringBuilder
- 正则,Date,DateFormat,Calendar
- 包装类,System,Math,Arrays,BigInteger,BigDecimal
- 集合,迭代器,增强for,泛型
- List,set,判断集合唯一
- map,Entry,HashMap,Collections
- 异常
- IO
- File
- 递归
- 字节流
- 字符流
- IO流分类
- 转换流
- 缓冲流
- 流的操作规律
- properties
- 序列化流与反序列化流
- 打印流
- commons-IO
- IO流总结
- 多线程
- 线程池
- 线程安全
- 线程同步
- 死锁
- lock接口
- ThreadLoad
- 等待唤醒机制
- 线程状态
- jdbc
- DBUtils
- 连接池DBCP
- c3p0连接池
- 网络编程
- 多线程socket上传图片
- 反射
- xml
- 设计模式
- 装饰器模式
- web service
- tomcat
- Servlet
- response
- request
- session和cookie
- JSP
- EL
- JSTL
- 事务
- 监听器Listener
- 过滤器Filter
- json
- linux安装软件
- 反射详解
- 类加载器和注解
- 动态代理
- jedis
- Hibernate
- 简介
- 创建映射文件
- Hibernate核心配置文件
- 事务和增删改查
- HibernateUtils
- 持久化对象的三种状态
- 检索方式
- query
- Criteria
- SQLQuery
- 持久化类
- 主键生成策略
- 缓存
- 事务管理
- 关系映射
- 注解
- 优化
- struts2
- 搭建
- 配置详解
- Action
- 结果跳转方式
- 访问ServletAPI方式
- 如何获得参数
- OGNL表达式
- valueStack 值栈
- Interceptor拦截器
- spring
- 导包
- IOC和DI
- Bean获取与实例化
- Bean属性注入
- spring注解
- 注解分层
- junit整合
- aop
- 动态代理实现
- cglib代理实现
- aop名词
- spring的aop
- aop-xml详解
- aop-注解详解
- 代理方式选择
- jdbcTemplate
- spring事务管理
- 回滚注意
- 事务传播属性
- MyBatis
- MyBatis简介
- 入门程序
- 与jdbc hibernate不同
- 原始Dao开发
- Mapper动态代理方式
- SqlMapConfig.xml配置文件
- 输入参数pojo包装类
- resultMap
- 动态sql
- 一对一关联
- 一对多
- 整合spring
- 逆向工程
- maven
- maven简介
- 仓库
- maven目录结构
- maven常用命令
- 生命周期
- eclipse中maven插件
- 入门程序
- 整合struct
- 依赖范围
- 添加插件
- idea配置
- jar包冲突
- 分模块开发
- 构建可执行的jar包(包含依赖jar包)
- springMVC
- 处理流程
- java面试
- java版本升级
- java1-8版本变更
- java9新特性
- 锁
- java资料
- idea
- jdk版本切换
- log4j
- 入门实例
- 基本使用方法
- Web中使用Log4j
- spring中使用log4j
- java代码优化