2.Spring的IOC部分
2.1、bean 对象的属性赋值
根据属性值的类型:
值注入:value
引用注入:ref
根据属性注入的方式:
构造器
set 方法
注解的方式
2.2给对象的属性赋值
complex类:
public class ComplexBean {
//提供getter、setter、toString()方法
private
Object[] arr;
private
List list;
private
Set
set ;
private
Map
map;
private
Properties properties;
}
applicationContext.xml:
<bean id="book01" class="com.atguigu.bean.Book">
<property
name="bid" value="100"/>
<property
name="bookName" value="为奴十二年"/>
<property
name="price" value="100.9"/>
</bean>
<bean class="com.atguigu.ComplexBean">
<!-- 1.针对数组类型的属性,用array标签 -->
<property name="arr">
<array>
<value>33</value>
<bean class="com.atguigu.bean.Book">
<property
name="bid" value="100"/>
<property
name="bookName" value="小红书"/>
<property
name="price" value="100.8"/>
</bean>
<ref bean="book01"></ref>
</array>
</property>
<!-- 2.针对list类型的属性,用list标签-->
<property name="list">
<list>
<value>33</value>
<bean class="com.atguigu.bean.Book">
<property
name="bid" value="100"/>
<property
name="bookName" value="小红书"/>
<property
name="price" value="100.8"/>
</bean>
<ref bean="book01"></ref>
</list>
</property>
<!-- 3.针对Set类型的属性,用set标签-->
<property name="set">
<set>
<value>33</value>
<bean class="com.atguigu.bean.Book">
<property
name="bid" value="100"/>
<property
name="bookName" value="小红书"/>
<property
name="price" value="100.8"/>
</bean>
<ref bean="book01"></ref>
</set>
</property>
<!-- 4.针对Map类型的属性,用map标签嵌套entry标签-->
<property name="map">
<map>
<entry
key="key1" value="value1"></entry>
<entry
key-ref="book01" value="value2"></entry>
<entry
key="key3" value-ref="book01"></entry>
<entry
key-ref="book01" value-ref="book01"></entry>
</map>
</property>
<!-- 5.针对Properties类型的属性,用Props标签嵌套prop标签-->
<property name="properties">
<props>
<prop
key="key1">value1</prop>
<prop
key="key2">value2</prop>
<prop
key="key3">value3</prop>
</props>
</property>
2.3 SPEL表达式
SPEL:全称 Spring Expression Language:Spring 的表达式语言
SPEL 语法:#{}
支持:
字面量:true,1,”张三”
普通对象[普通对象属性,普通对象的普通方法]
类的静态属性、方法
各种各样的运算符:
①算术运算符:+、-、*、/、%、^
②字符串连接:+
③比较运算符:<、>、==、<=、>=、lt、gt、eq、le、ge
④逻辑运算符:and, or, not, |
⑤三目运算符:判断条件?判断结果为true时的取值:判断结果为false时的取值
⑥正则表达式:matches
2.4基于注解的方式创建bean对象
1.导入jar包:
![](https://i-blog.csdnimg.cn/blog_migrate/c6bcd8b00d38aae70da9180dd043776d.png)
2.在 spring 的 配 置 文 件 中 配 置 一 个<context:component-scan
basePackage=””>
![](https://i-blog.csdnimg.cn/blog_migrate/752ca747ce304ca989e2538c54c11caa.png)
3.在扫描包或者扫描包的子包下类上加@Component 注解
![](https://i-blog.csdnimg.cn/blog_migrate/0155b101bef9e8415015d3f8c46afa70.png)
4.测试
![](https://i-blog.csdnimg.cn/blog_migrate/743729d6336a58b7362f16ef0710674e.png)
2.5 常用注解
![](https://i-blog.csdnimg.cn/blog_migrate/ae4ba1381ce944c18bacb00c68b81f6a.png)
@Controller----------->@Service------------>@Repository
UserController------->UserService---------->UserDao
以上四个注解的共同点:
1.都标记在类上,都是在容器中生成一个对象,默认是单例的。
2.都有一个 value 属性,value 属性值表示的是当前类对象在容器中的 id 值
3.如果不指定这些注解的 value 属性的时候,当前 bean 对象在容器中的 id 值是当前类名首字母小写,如果自己指定了注解 value 属性值,在获取对象的时候,要使用自己指定的 value 属性值获取,当一个注解只有 value 属性值的时候,value=是可以省略的。
2.6 @Scope
标记在类上、方法上,使用和含义同<bean>标签的 scope 属性一样。
2.7 基于注解的方式给对象的属性赋值
@Value:相当于 xml 文件中的 value 属性值,给基本类型的属性赋值
@Autowired:相当于 xml 文件中的 ref 属性值,给引用类型的属性赋值,Spring 框架
@Resource:相当于 xml 文件中的 ref 属性值,给引用类型的属性赋值,JDK 中
![](https://i-blog.csdnimg.cn/blog_migrate/7837bfaae33378641a4e212d11be3dd7.png)
2.8 引用类型属性的手动与自动装配
手动装配:
![](https://i-blog.csdnimg.cn/blog_migrate/a0f1200f0e1cef5c828c3562e06017d8.png)
自动装配:
基于xml:
![](https://i-blog.csdnimg.cn/blog_migrate/d4193b48d76959a5d85e93cc31157474.png)
基于注解:
@Autowired
@Resource
强调:基于注解的方式给对象的属性赋值,不需要提供属性的 set 方法
2.9 加载properties文件
第一步:导入 jar 包:mysql 驱动包、druid 的包
第 二 步 : 在 spring 的 配 置 文 件 中 配 置 <context:property-placeholder
location=””>
第三步:就可以在容器中的 bean 对象中通过${}根据 properties 文件中的键取对应的值使用。
![](https://i-blog.csdnimg.cn/blog_migrate/9635331ecb79d6750c420dda30396f24.png)
第四步:测试
![](https://i-blog.csdnimg.cn/blog_migrate/b7be507169204f4af381880db2743b02.png)