Spring入门

Spring

Spring

Spring是loc和aop的容器。解决了对象的创建和对象的使用分离。使得程序符合开闭原则。对扩展开放,对修改关闭。使得程序有很好的可维护性。可扩展性。

Ioc

loc:inversion of control:控制翻转,控制是指对象的创建权利,反转是指将对象创建权利转移出去,让Spring容器去创建对象。

Spring容器类

ClassPathXmlApplicationContext类就是Spring的容器类,该类在实例化时会通过构造函数加载Spring配置文件

classPathXmlApplicationContext c=new classPathXmlApplicationContext("beans.xml");

加载配置文件后Spring容器就会解析配置文件,根据配置的节点创建对象。创建后的对象都被存储在Spring容器中。从Spring容器中获取Spring创建的对象。

ctx.getBean(beanname);
DI

Dependency Injection:依赖注入,在Spring配置文件中使用节点实现的

<property name="dao" ref="dao"></property>
Spring创建bean的方式
  • 使用xml的bean节点创建bean

      <bean id="dao"  class="com.it.laobing.maven.UserMySQLDAO"></bean>
    
  • 使用静态工厂创建Bean

    public class BoyStaticFactory{
        public static Boy createInstance(){
            return new Boy();
        }
    }
    Spring的配置文件
        <bean id="boy1" class="BoyStaticFactory" factory-method="createInstance">
    
  • 使用实例工厂的创建Bean

    public class BoyStaticFactory{
        public Boy createInstanceBoy(){
            return new Boy();
        }
    }
    spring的配置文件
    <bean id="boyStaticFactory" class="BoyStaticFactory"></bean>
    <bean id="boy" factory-bean="boyStaticFactory" factory-method="createInstanceBoy"></bean>
    
  • 使用注解创建bean对象(推荐使用)

    @Component:组件

    @Controller:专门表示控制器的bean

    @Service:专门表示业务类的bean

    @Repository:专门表示dao类

    实际上着四个注解使用上没有区别,可以用@Controller标注在Service类上。

依赖注入Bean的方式
  • 构造函数注入

    public class Boy {
    	IPet pet;
    	
    	public Boy(IPet pet) {
    		this.pet = pet;
    	}
    	public IPet getPet() {
    		return pet;
    	}
    	public void feed(String food) {
    		pet.eat(food);
    	}
    }
    	第二步:spring配置文件
            <bean id="cat" class="com.kaifamiao.maven.bean.Cat"></bean>
    <bean id="boy" class="com.kaifamiao.maven.bean.Boy">
    	<constructor-arg index="0" type="com.kaifamiao.maven.bean.IPet" ref="cat"></constructor-arg>
    </bean>
    
  • set方法注入

    public class Boy {
    	IPet pet;
    	public IPet getPet() {
    		return pet;
    	}
    	//set方法注入Bean
    	public void setPet(IPet pet) {
    		this.pet = pet;
    	}
    	public void feed(String food) {
    		pet.eat(food);
    	}
    }
    第二步:spring配置文件
    	<bean id="cat" class="Cat"></bean>
    	<bean id="boy" class="Boy">
    		<property name="pet" ref="cat"></property>
    	</bean>
    
  • 自动注入

    Spring提供了5种自动注入的方式,no,byName,byType,constructor和autodetect。在bean节点中使用autowrite属性可以设置bean注入的方式。

    • no:no模式是不采用任何形式的自动注入,完全依赖手动明确配置各个bean之间的依赖关系。
    • byName:按照类中声明的实例变量的名称,与xml配置文件中声明的bean名称进行匹配。
    • byType:分析响应依赖对象的类型,然后在容器所管理的所有bean定义中查找与依赖对象类型相同的bean。然后将符合条件的bean自动注入到当前bean定义中。如果在容器种有很多符合条件的bean定义,容器返回异常。
    • constructor
    • autodetect
Bean的作用域

Bean对象的作用域是指Bean对象的使用范围

在节点的scope属性设置bean的作用域

<bean id="cat" class="Cat"scope="session"></bean>

Scope的值有四个

  • singleton:单利(默认值)
  • prototype:原型模式(多例模式)
  • request:请求模式
  • session:会话模式
Bean的懒加载与Bean的立即加载
  • lazy-init=“false”
  • lazy-init=“true”

设置单独配置加载会有些麻烦,可以在beans节点上对所有的bean进行全局配置。

default-lazy-init="default"
Bean的生命周期
  • 初始化
  • 销毁
Spring配置优化
  • 依赖注入(DI)的优化

    • 使用注解代替xml配置

    • 第一步在spring配置文件的命名空间声明中添加context。

    • 第二步:在spring的配置文件中启用注解 <context:annotation-config />

    • 第三步:在类的属性名称上标注注解

      • @Autowired

        根据类型自动将spring容器中的bean对象注入到该属性。如果spring容器中需要注入类型的bean对象有多个,那么spring容器会抛出异常

      • @Qualifier

        @Qualifier注解与@Autowired配合使用,其中@Autowired明确注入的类型,而@Qualifier明确注入的名称

      • @Resource

        @Resource是根据名称注入,该注解是@Autowired和@Qualifier的组合体,注意@Resource不是spring提供了,而是JavaEE提供的,使用时需要导入annotation- api.jar

  • 控制反转(IOC)的优化

    • 第一步:在spring配置文件的命名空间声明中添加context。

    • 第二步:在spring配置文件中启动组件扫描 <context:component-scan base-package=“com.kaifamiao.maven.bean”/>

    • 在类上标注注解

      • @Controller 标注在控制器类上
      • @Service 标注在业务类上
      • @Repository 标注在DAO类上
      • @Component 标注在非控制器,非业务,非DAO的类上
  • 作用域的优化

    • @Scope
  • 生命周期的优化

    • @postConstruct Spring提供了@PostConstruct用于初始化
    • @preDestory Spring提供了@ PreDestroy用于销毁
  • Spring 的java-based配置

    • @Configuration

      @Configuration注解用于标注在类上,标注了@Configuration注解的类将作为bean定义的来源。此外@Configuration类允许bean之间依赖,只需简单地调用该类中其他的@Bean方法。

    • ImportResources

      @ImportResource注解标注在类上,表示该类导入的外部资源,例如beans.xml。

    • @Bean

      @Bean注解用于标注在方法上,表示一个方法实例化、配置、初始化一个新的被Spring容器管理的bean对象。@Bean注解相当于xml配置文件中的。@Bean通常和@Configuration注解一起使用。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值