spring框架

spring

spring框架理解
  • spring是一个基于IOC和AOP的轻量级容器框架
spring IOC
  • IOC 控制反转 : 把对象的创建权限交给spring容器管理
IOC 的实现方式
  1. 通过spring配置文件
    <bean id="" class=""></bean>
  1. 基于注解的控制反转
    • 在spring容器中添加标签
    • 启用注解的支持,扫描指定包下的注解
<context:component-scan base-package=“包路径”/>
  1. 再要管理的对象的类上添加相应的注解
 常用的注解有
@component   :使用在非业务,非持久,非控制层
@service      :使用在业务逻辑层
@repository   :使用在持久层
@controller   :使用在控制层

注解设置对象为多例 @scope(“prototype”)

spring DI
  • 依赖注入:给Spring控制反转的对象属性注入值的过程
    1. 属性(Setter)注入:
      一个property标签代表对象中的一个属性(Set方法)
      注意: 对象必须提供无参构造方法
    2. 构造注入:
      一个constructor-arg标签,代表构造方法中的一个参数
      注意:构造方法有多少个参数,就必须提供多少个constructor-arg
    3. 静态工厂注入
      1) 类中提供一个静态方法,并返回一个对象
      2) 在容器用通过 factory-method 指定该静态方法即可
      实例工厂注入
      1) 类中提供一个非静态方法,并返回一个对象
      2) 在spring中,先配置工厂对象
      3) 通过factory-bean指定工厂对象,factory-method 指定非静态方法即可

不同数据类型的注入方式

  1. 字面量的注入方式 用 value

  2. spring的管理的对象的注入方式用 ref

  3. 特殊的注入方式 用 value标签配置
  4. 对属性类型为数组的数据注入方式 List ,或者 value(前提是数组元素是字面量)
  5. 对属性类型为List的数据注入方式 List ,或者 value(前提是数组元素是字面量)
  6. 对属性类型为Set的数据注入方式 Set
  7. 对属性类型为Map的数据注入方式 map -> entry
  8. 对属性类型为Properties的数据注入方式 props -> prop
  9. 对空值的注入方式
实例

···java
public class Eg {

private User user;
private List<String> address;
private String[] tel;
private Map<String,String> zhengjian;
private Properties pro;
public User getUser() {
    return user;
}
public void setUser(User user) {
    this.user = user;
}
public List<String> getAddress() {
    return address;
}
public void setAddress(List<String> address) {
    this.address = address;
}
public String[] getTel() {
    return tel;
}
public void setTel(String[] tel) {
    this.tel = tel;
}

public Map<String, String> getZhengjian() {
    return zhengjian;
}
public void setZhengjian(Map<String, String> zhengjian) {
    this.zhengjian = zhengjian;
}
public Properties getPro() {
    return pro;
}
public void setPro(Properties pro) {
    this.pro = pro;
}
@Override
public String toString() {
    return "Eg [user=" + user + ", address=" + address + ", tel="
            + Arrays.toString(tel) + ", zhengjian=" + zhengjian + ", pro="
            + pro + "]";
}

}

```xml
<!-- 依赖注入 -->
    <!-- set -->
    <bean id="user1" class="com.soft.entity.User">
       <property name="id" value="2"/>
       <property name="name" value="hello"/>
       <property name="age" value="22"/>
    </bean>

    <!-- 构造器注入 -->
    <bean id="user2" class="com.soft.entity.User">
       <constructor-arg value="2" index="0"/>
       <constructor-arg value="hello" index="1"/>
       <constructor-arg value="42" index="2"/>
    </bean>

    <!-- 静态工厂注入 -->
    <bean id="user3" class="com.soft.entity.UserFactory" factory-method="getUser"></bean>

    <!-- 实例工厂注入 -->
    <bean id="uf" class="com.soft.entity.UserFactory"></bean>
    <bean id="user4" factory-method="getUser2" factory-bean="uf" ></bean>


    <!-- 注入对象类型 -->
    <bean id="eg1" class="com.soft.entity.Eg">
        <property name="user" ref="user1"></property>
    </bean>
    <!-- 注入list类型 -->
    <bean id="eg2" class="com.soft.entity.Eg">
         <property name="address">
         <list>
           <value>河南</value>
           <value>郑州</value>
         </list>
         </property>
    </bean>
    <!-- string[]  -->
    <bean id="eg3" class="com.soft.entity.Eg">
      <property name="tel">
         <list>
         <value>11111111111</value>
         <value>11122222222</value>
         </list>
      </property>
    </bean>
    <!-- map -->
    <bean id="eg4" class="com.soft.entity.Eg">
    <property name="zhengjian">
      <map>
      <entry value="x22223243" key="身份证"></entry>
      <entry value="xert23243" key="合格证"></entry>
      </map>
    </property>
    </bean>
    <!-- Properties -->
    <bean id="eg5" class="com.soft.entity.Eg">
    <property name="pro">
        <props>
          <prop key="记者证">23244234<![CDATA[<dfd>]]></prop>
        </props>
    </property>
    </bean>
基于注解的依赖注入
  • @Value (注入字面量)
  • @Resource 相当于xml中 ref
    默认按照名字注入,如果名字在容器中没有找到,则按照类型注入,
    如果@Resource指定了名字,则只会按照名字查找,不再按照类型注入
  • @Autowired 相当于xml中 ref
    默认按照名字注入,如果默认的名字在容器中没有找到,按照类型注入
  • @Autowired 允许注入的对象为空,前提是必须使用 required=false
  • @Autowired可以配合@Qualifier(“bean的ID”) 使用,达到和@Resource一样的效果
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值