Spring

  Spring 框架

Spring是一个开源的轻量级框架,核心思想是IoC和AOP,从简单性,可测试性和松耦合的角度而言任何java应用都可以从spring中受益.

优点:

  • 高内聚低耦合(spring工厂用于生成本bean,可以将所有对象的创建和维护交给Spring管理;)
  • AOP编程的支持(Spring提供面向切面编程,可方便实现对程序进行权限拦截,运行监控等功能.)
  • 声明式事务的支持(只需配置就可以完成对事务的管理,无序手动编程)
  • 方便程序的测试(Spring支持Junit4)
  • 方便集成各种框架(Spring内部提供了对Struts,hibernate.MyBatisQuartz等框架的直接支持)
  • 降低javaEE API的使用难度(Spring提供了对jdbc,javaMail等API的封装,使其使用难度大大降低.)

IoC容器(Inverse of Control)

IOC(控制反转)需要实例对象时直接从IoC容器中获得而不用new 的方式创建,需将实现类全限名称配置在xml文件中
配置文件.
文件位置:一般配置文件放在src下,xml文件的<beans>中
名称:一般在开发中用applicationContext.xml
内容:添加schema(计划)约束
<bean>标签:配置要创建的对象
        id属性:唯一标识,从Spring容器中获得实例时使用
        class属性:需创建实例的全限定类名(包名.类名)
<bean id =“person” class=“com.xalo.ertity.Person”/>

测试:

1.加载配置文件,参数为xml文件名
ApplicationContext   context  =  new ClassPathXMLApplicationContext(“applictionContext.xml”);

2.获取对象,返回值为Object类型
Person   person = (Person) context.getBean(“person”);
其中的参数为配置文件中的id
getBean方法参数中的id相同时,获取的是同一个对象.
对象的获取方式由主动变为被动,让使用者关注获取之后要做的操作,不用在进行繁琐的创建对象和赋值过程;
对象在加载配置文件时就以单例模式被创建好,等待调用,所以每次getBean获取的都是同一个对象,bean为单例对象时会有效减少服务器上的内存占有,出于节约服务器内存的目的,Spring会通过监听器监听Bean对象,如果该对象长期不使用则自动销毁,再次使用时,再次创建.
<bean>标签  lazy-init属性:是否在加载配置文件时创建对象,参数为true时在getBean时加载,此时Bean对象仍为单例模式创建.
<beans>标签  default-lazy-init 属性:统一配置多有<bean>标签的lazy-init属性,会被<bean>标签中lazy-init属性覆盖.
<bean>标签 init-method 属性和destroy-method属性:指定该Bean对象创建时执行的方法和销毁时执行的方法.

依赖注入

依赖注入即向Spring管理的对象赋值
1.构造器注入(不够灵活,不常用)
通过类中的有参构造器进行注入,要赋值的属性必须存在于构造器的参数列表中.
配置文件:
位置:<bean>标签中<constructor-arg>每个此标签代表构造器中的一个参数
value属性:给构造器的参数赋值,必须和对应的参数类型匹配.
index属性:要赋值的参数的索引,从o开始,不设置该属性,自上而下为参数注入属性
name属性:构造器的形参名
type属性:指定注入数据的类型
注:如果未指定index和name,必须安参数顺序配置
配置集合属性
list和set集合
通过<constructor-arg>标签的子标签<list>或<set>标签注入
示例:
<constructor-arg name=“list”>
    创建一个list对象
    <list>
        给该list集合中添加元素
        <value>1<value>
        <value>12<value>
        ……
    </list>
</constructor-arg>

Set集合与上相同
Map示例:
<constructor-arg name=“map”>
    创建一个list对象
    <map>
        <entry key=“name”  value=“张三”/>        
        ……
    </map>
</constructor-arg>

1.通过构造器注入bean对象
需使用<constructor-arg>标签的ref属性引用已配置的bean,ref属性的值为bean的id
示例:<constructor-arg  ref=“service”/>
2.setter注入(常用)
要求类中属性有setter方法和getter方法,根据<property>标签的name属性的值去找对应方法名的setter方法而不是成员变量或setter方法的参数名.
位置:
<bean>标签的子标签<property>
<property name=“age”  value=“34”/>
<property name=“service” ref =“service”/> 此处的service就是引用bean对象

3.IoC通过静态工厂模式创建对象并注入
根据id属性获取到工厂类名,在通过类名调用factory-method属性指定的静态方法,整个过程中没有创建工厂对象.
实例:
<bean  id=“car” class =“com.xalo.action,CarFactory”  factory-method=“getCar” >
    给getCar方法传参数
    <constructor-arg value=“jeep”/>
</bean>

4.IoC通过工厂方法模式创建对象并注入
工厂类中获取具体对象的方法必须不是静态方法而是成员方法
1.需要加载一个工厂
2.在要使用工厂对象来创建bean中通过factory-bean获取工厂对象,调用factory-method指定的成员方法.
实例:
<bean id = “carFactory”  class=“com.xalo.action. CarFactory”></bean>
<bean id = “car” factory-bean =“CarFactory” factory-method=“getCar”>
    给factory-method指定的方法传参
    <constructor-arg  value=“suv”>
</bean>

 

 

 

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

熊掌渔

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值