Spring_02 注入类型值、利用引用注入类型值、spring表达式、与类相关的注解、与依赖注入相关的注解、注解扫描
注意:注入基本类型值在本质上就是依赖注入,而且是利用的set方式进行的依赖注入
1 注入基本类型的值
<property name="基本类型的成员变量名" value="值"/>
2 注入集合类型的值(直接注入)
2.1 注入list类型的值
1 <property name="interest"> 2 <list> 3 <value>钓鱼</value> 4 <value>做饭</value> 5 <value>看电视</value> 6 <value>看电视</value> 7 </list> 8 </property>
2.2 注入set类型的值
1 <property name="city"> 2 <set> 3 <value>北京</value> 4 <value>长沙</value> 5 <value>武汉</value> 6 <value>武汉</value> 7 </set> 8 </property>
2.3 注入map类型的值
1 <property name="score"> 2 <map> 3 <entry key="英语" value="80"/> 4 <entry key="math" value="90"/> 5 </map> 6 </property>
2.4 注入properties类型的值
1 <property name="db"> 2 <props> 3 <prop key="username">King</prop> 4 <prop key="password">1234</prop> 5 </props> 6 </property>
3 注入集合类型的值(利用引用注入)
1 <util:list id="interestBean"> 2 <value>游泳</value> 3 <value>台球</value> 4 <value>编程</value> 5 </util:list> 6 <util:set id="cityBean"> 7 <value>北京</value> 8 <value>长沙</value> 9 <value>南昌</value> 10 </util:set> 11 <util:map id="scoreBean"> 12 <entry key="english" value="80"/> 13 <entry key="math" value="90"/> 14 </util:map> 15 <util:properties id="dbBean"> 16 <prop key="username">Sally</prop> 17 <prop key="password">1234</prop> 18 </util:properties> 19 <!-- 20 以引用的方式注入集合类型的值。 21 --> 22 <bean id="vb2" class="value.ValueBean"> 23 <property name="interest" 24 ref="interestBean"/> 25 <property name="city" 26 ref="cityBean"/> 27 <property name="score" 28 ref="scoreBean"/> 29 <property name="db" 30 ref="dbBean"/> 31 </bean>
4 利用注解进行简化配置
4.1 与类有关的4个注解
@respository("id属性值") -> 用于持久层
@controller("id属性值") -> 用于控制层
@service("id属性值") -> 用于服务层
@component("id属性值") -> 通吃
注意:id属性值 一般是 类的首字母小写后的结果
4.2 其他注解
@Scope("singleton") -->> 设置作用域
@Lazy(true) -->> 设置延迟加载
@PostConstruct -->> 设置初始化方法
@PreDestroy -->> 设置销毁方法
@Value("warrior") -->> 给成员变量注入值
5 使用spring表达式去读取其他bean的属性
1 <bean id="sb1" class="value.SpelBean"> 2 <property name="name" 3 value="#{vb1.name}"/> 4 <property name="interest" 5 value="#{vb1.interest[1]}"/> 6 <property name="score" 7 value="#{vb1.score['英语']}"/> 8 <property name="pageSize" 9 value="#{config['jdbc.pagesize']}"/> 10 </bean>
6 依赖注入
6.1 @Autowired 和 @Qualifier("student")
直接将这两行写到 注入变量上面就行啦;支持 set注入 和 构造器注入
6.2 @Resource(name="student") -->> 一般都用这个
Resource 的包在 servlet-api.jar,所以需要配置一下运行环境;只支持 构造器注入
Tomcat的运行环境自带了 servlet-api.jar 这个包,这个包里面就有使用Resource注解时需要的jar包
如果运行环境不是Tomcat,那么就需要单独导入Resource注解需要的那个jar包,这个jar包是:javax.annotation-api
图解:需要将B依赖注入到A中,在A中需要添加一个类型是B的成员变量,在该成员变量上面添加依赖注解@Resource(name="B的id")即可;不需要在A中为该成员变量实现set方法或者有参构造器(依赖注入的有参构造器),容器如果用到set方法或者有参构造器时它自己会想办法得到的,但是B中必须实现无参构造器,因为spring容器在创建实例时必须用到无参构造器。
7 使用了注解后必须在spring配置文件中配置注解扫描
注解扫描
容器会扫描指定包及其子包下面的所有的类,如果类前面添加了特定的注解(比如@Component),则容器会将这个类纳入容器进行管理(相当于配置了一个bean,其中,bean的id默认值等于首字母小写之后的类名)
<context:component-scan base-package="annotation"/>
本博客源代码:点击前往