0%

spring依赖注入

在没有依赖注入之前,我们想要什么都需要自己主动地去获取

1
2
3
4
5
6
private Car car;
private House house;
public Person(){
car = new Car();
house = new House();
}

但是我们真正只是需要调用该依赖对象做某些事情,只要在用的时候,该对象是可以调用的就可以,该对象是主动获取还是别人送过来并没有太大的区别

IOC&&DI

控制反转(Inversion of Control,缩写为IoC),是面向对象编程中的一种设计原则,用来降低耦合度,IOC(Inversion of Control)目前比较流行的有两种方式:

  • 依赖注入DI(Dependency Injection) 代码中无需给出目标对象的定位路径,只需给定对象名称和类型,系统就会直接去容器中进行查找,spring使用的就是这种形式。对象不是从容器中查找它依赖的类,而是在容器实例化对象的时候主动将它依赖的类注入给它

  • 依赖查找DL(Dependency Lookup) 代码中需要给出目标对象的存放路径,系统会根据路径到容器中查找响应的对象,典型的应用是JNDI

org.springframework.beans.factory.BeanFactory是IOC容器的接口定义,是Spring IOC容器的核心接口

Spring IOC本质是创建类实例的工厂,并且对类实例进行管理,负责创建对象,管理对象,装配对象,配置对象,并且管理这些对象的整个生命周期。

阅读全文 »

bean的继承和依赖

spring除了提供了一般的配置bean的方式之外,还实现了java中继承的特性,设置bean的父子关系,这样对于一些重复的配置就可以进行省略

阅读全文 »

spring配置bean

使用xml配置

使用构造器创建

构造器创建bean是最常用的,如果不使用构造注入,Spring会调用无参构造器来创建实例

使用的是反射机制,要求该bean所对应的类必须有一个无参构造器

阅读全文 »

spring容器

实现方式

spring中提供了各式各样的IOC容器的实现供用户选择和使用,使用什么样的容器取决于用户的需要

  • BeanFactory 该接口是最简单的容器,提供了基本的DI支持。最常用的BeanFactory实现是XmlBeanFactory类,根据XML文件中的定义加载bean,从XML文件读取配置元数据并用它去创建一个完全配置的系统或应用

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    public interface BeanFactory {


    // 可以使用&来得到FactoryBean本身,用于区分用FactoryBean产生的对象和FactoryBean本身,
    // 如使用myJndiObject获取到的是FactoryBean产生的对象,使用&myJndiObject可以获取到对应的FactoryBean对象
    String FACTORY_BEAN_PREFIX = "&";

    Object getBean(String name) throws BeansException;

    <T> T getBean(String name, Class<T> requiredType) throws BeansException;

    Object getBean(String name, Object... args) throws BeansException;

    <T> T getBean(Class<T> requiredType) throws BeansException;

    <T> T getBean(Class<T> requiredType, Object... args) throws BeansException;

    boolean containsBean(String name);

    boolean isSingleton(String name) throws NoSuchBeanDefinitionException;

    boolean isPrototype(String name) throws NoSuchBeanDefinitionException;

    boolean isTypeMatch(String name, ResolvableType typeToMatch) throws NoSuchBeanDefinitionException;

    boolean isTypeMatch(String name, Class<?> typeToMatch) throws NoSuchBeanDefinitionException;

    Class<?> getType(String name) throws NoSuchBeanDefinitionException;

    String[] getAliases(String name);

    }
  • ApplicationContext应用上下文 基于BeanFactory之上构建,提供面向应用的服务,并继承了资源ResourcePatternResolver,消息MessageSource,事件ApplicationEventPublisher,环境EnvironmentCapable,工厂五种能力常见的实现方式

    1
    2
    3
    4
    // 实现MessageSource接口,可以支持不同的信息员,支持国际化
    // 实现ApplicationEventPublisher,支持了事件机制
    public interface ApplicationContext extends EnvironmentCapable, ListableBeanFactory, HierarchicalBeanFactory,
    MessageSource, ApplicationEventPublisher, ResourcePatternResolver

ApplicationContext是一个接口,大部分的方法实现由AbstractApplicationContext实现

  • ClassPathXmlApplicationContext 继承了AbstractXmlApplicationContext抽象类,从类路径下的XML配置文件中加载上下文定义,把应用上下文定义文件当做资源

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    ApplicationContext  context = new ClassPathXmlApplicationContext("application.xml");

    // this(new String[] {configLocation}, true, null);
    // refresh为true,parent为null
    public ClassPathXmlApplicationContext(String[] configLocations, boolean refresh, ApplicationContext parent)
    throws BeansException {

    super(parent);
    setConfigLocations(configLocations);
    if (refresh) {
    refresh(); // 触发了IOC容器的初始化
    }
    }
  • FileSystemXmlApplicationContext 读取文件系统下的XML配置文件并加载上下文定义

  • XmlWebApplicationContext 读取Web应用下的XML配置文件并装载上下文

  • AnnotationConfigApplicationContext: 注解方式

ConfigurableApplicationContext扩展于ApplicationContext接口,新增了两个主要的方法,refresh()和close(),让ApplicationContext具有启动、刷新和关闭上下文的能力

WebApplicationContext专门为WEB应用准备的,允许从相对于WEB根目录的路径中初始化上下文

阅读全文 »

修改表

修改MySQL的表结构

修改数据库编码格式

1
alter database <数据库名> character set utf8mb4;

修改表的编码

1
alter table <表名> character set utf8;

修改表的列名

1
2
#alter table 表名 change column 所要修改的列名 所要改成的名称 类型; 
alter table user change column name u_name varchar(20);
阅读全文 »