美文网首页
Spring解析

Spring解析

作者: LinkedIn | 来源:发表于2017-05-28 19:04 被阅读0次

    Spring 框架

    Spring 是一个开源框架,是为了解决企业应用程序开发复杂性而创建的。框架的主要优势之一就是其分层架构,分层架构允许您选择使用哪一个组件,同时为 J2EE 应用程序开发提供集成的框架。
    Spring框架由七个模块组成:核心容器、应用上下文(Context)模块、Spring的AOP模块、JDBC抽象和DAO模块、对象/关系映射集成模块、Spring的Web模块、Spring的MVC框架。


    结构图

    Paste_Image.png

    代码结构

    package basedao;
    
    public interface IDao {
        
        public abstract String queryId();
    
    }
    
    
    package basedao.impl;
    
    import basedao.IDao;
    
    public class IDaoImpl implements IDao{
    
        @Override
        public String queryId() {
            return "查询成功";
        }
        
    }
    
    package services;
    
    public interface iService {
        void selectDao();
    }
    
    
    package services;
    
    import basedao.IDao;
    
    public class servicesimpl implements iService{
    //这里是通过 by name来进行设置的
        private IDao idao;
        public void setIdao(IDao idao) {
            this.idao = idao;
        }
        @Override
        public void selectDao() {
            System.out.println(idao.queryId());
        }
    
    }
    
    
    package test;
    
    import org.springframework.context.ApplicationContext;
    import org.springframework.context.support.ClassPathXmlApplicationContext;
    
    import services.iService;
    
    public class Main {
        @SuppressWarnings("resource")
        public static void main(String[] args) {
            ApplicationContext context = new ClassPathXmlApplicationContext("ApplicationContext.xml");
            iService bean = context.getBean("jdk", iService.class);
            bean.selectDao();
            
        }
    
    }
    
    

    xml配置文件

    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://www.springframework.org/schema/beans
               http://www.springframework.org/schema/beans/spring-beans.xsd">
        <bean id="jdk" class="services.servicesimpl" autowire="byName"> <property name="idao" ref="IDaoImpl"></property></bean>
        <bean id="IDaoImpl" class="basedao.impl.IDaoImpl"></bean>
    </beans>
    

    要点解析

    • Spring支持自动装配Bean与Bean之间的依赖关系,也就是说我们无需显示的指定依赖Bean。由BeanFactory检查XML配置文件内容,根据某种规则,为主调Bean注入依赖关系。
      Spring的自动装配机制可以通过<bean.../>元素的default-autowire属性指定,也可以通过<bean.../>元素的autowire属性指定。
      - 自动装配可以减少配置文件的工作量,但是它降低了依赖关系的透明性和清晰性,所以一般来说在较大部署环境中不推荐使用,显示配置合作者能够得到更加清晰的依赖关系。Spring提供了如下几种规则来实现自动装配。
      no:不适用自动装配。Bean依赖必须通过ref元素定义。
      - byName:根据属性名自动装配。BeanFactory查找容器中的全部Bean,找出其中id属性与属性同名的Bean来完成注入。如果没有找到匹配的Bean实例,则Spring不会进行任何注入。
      - byType:根据属性类型自动装配。BeanFactory查找容器中的全部Bean,如果正好有一个与依赖属性类型相同的Bean,就自动注入这个属性;但是如果有多个这样的Bean,就会抛出一个异常。如果没有匹配的Bean,则什么都不会发生,属性就不会被设置。如果需要无法自动装配时抛出异常,则设置dependency-check=”objects”。
      - constructor:与不Type类似,区别是用于构造注入的参数。
      Autodetect:BeanFactory根据Bean内部结构,决定使用constructor或者byType。如果找到一个默认的构造函数,则使用byTe。

      - byName规则
        byTyep规则是指通过名字注入依赖关系,假如Bean A的实现类里面包含setB()方法,而Spring的配置文件恰好包含一个id为b的Bean,则Spring容器就会将b实例注入Bean A中。如果容器中没有名字匹配的Bean,Spring则不会做任何事情。
      
      • 当一个Bean即使用自动装配依赖,又使用ref显示依赖时,则显示指定的依赖就会覆盖自动装配。
        在默认的情况下,Spring会自动搜索容器中的全部Bean,并对这些Bean进行判断,判断他们是否满足自动装配的条件,如果满足就会将该Bean注入目标Bean实例中。如果我们不想让Spring搜索容器中的全部Bean,也就是说,我们需要Spring来判断哪些Bean需要搜索,哪些Bean不需要搜索,这个时候就需要用到autowire-candidate属性。通过为<bean.../>元素设置autowire-candidate=”false”,即可将该Bean限制在自动装配范围之外,容器在查找自动装配对象时将不考虑该Bean。

    bean中其他配置
    在bean 除了基本的配置类型以为,可能还存在其他类型 list set
    map properties ,如果使用了这里类型,只需要在propert中 进行相应的配置,即可。

    相关文章

      网友评论

          本文标题:Spring解析

          本文链接:https://www.haomeiwen.com/subject/vxmhfxtx.html