Spring解析

Spring 框架

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


结构图

Spring解析_第1张图片
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配置文件



     
    


要点解析

  • Spring支持自动装配Bean与Bean之间的依赖关系,也就是说我们无需显示的指定依赖Bean。由BeanFactory检查XML配置文件内容,根据某种规则,为主调Bean注入依赖关系。
    Spring的自动装配机制可以通过元素的default-autowire属性指定,也可以通过元素的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属性。通过为元素设置autowire-candidate=”false”,即可将该Bean限制在自动装配范围之外,容器在查找自动装配对象时将不考虑该Bean。

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

你可能感兴趣的:(Spring解析)