Spring依赖注入-p.c注入-Bean属性

目录

1.依赖注入

1.1构造

1.2set注入

2.基于XML的自动装配

2.1根据名称:

2.2根据类型:

2.3根据构造自动注入

3.p命名空间注入c命名空间注入

3.1p命名空间注入

3.2c命名空间注入

4.Spring 文件中 Bean属性

scope


1.依赖注入

依赖注入,是IOC的一个方面,是个通常的概念,它有多种解释。这概念是说你不用创建对象,而只需要描述它如何被创建。你不在代码里直接组装你的组件和服务,但是要在配置文件里描述哪些组件需要哪些服务,之后一个容器(IOC容器)负责把他们组装起来。依赖注入:

  • 依赖指的是对象和对象之间的关联关系。
  • 注入指的是一种数据传递行为,通过注入行为来让对象和对象产生关系。

依赖注入常见的实现方式包括两种:

  • 第一种:set注入
  • 第二种:构造注入

1.1构造

核心原理:通过调用构造方法来给属性赋值

  • 通过下标
  • 可以通过参数名
  • 也可以不指定下标和参数名,可以类型自动推断。


       //这里的name  是构造方法上参数的名字  ref 是引用userDao对象
        
    

1.2set注入

通过property标签获取到属性名:userDao

通过属性名推断出set方法名:setUserDao

通过反射机制调用setUserDao()方法给属性赋值

property标签的name是属性名。

property标签的ref是要注入的bean对象的id。(通过ref属性来完成bean的装配,这是bean最简单的一种装配方式。装配指的是:创建系统组件之间关联的动作)

   
        
    

注入基本类型

注入set集合

 
            
                
                110
                110
            
        

注入List集合

 
            
                铁锤
                张三
                
            
        

注入Map集合

 
            
                
                
                
                
            
        

注入Properties


            
                com.mysql.cj.jdbc.Driver
                jdbc:mysql://localhost:3306/spring
                root
                123456
            
        

2.基于XML的自动装配

2.1根据名称:

  • UserService Bean中需要添加autowire="byName",表示通过名称进行装配。
  • UserService类中有一个UserDao属性,而UserDao属性的名字是aaa,对应的set方法是setUserDao(),正好和UserDao Bean的id是一样的。这就是根据名称自动装配。
userDao userDao ;
public void setUserDao(userDao userDao) {
   this.userDao = userDao;
    }





    

2.2根据类型:

可以看到无论是byName还是byType,在装配的时候都是基于set方法的。所以set方法是必须要提供的。提供构造方法是不行的,

//不能给id 或者给id取名 与set方法中参数名称一致
 

    
    

2.3根据构造自动注入

提供构造函数:无需关系引用的id

 

    
    

3.p命名空间注入c命名空间注入

3.1p命名空间注入

目的:简化配置。

使用p命名空间注入的前提条件包括两个:

  • 第一:在XML头部信息中添加p命名空间的配置信息:xmlns:p="http://www.springframework.org/schema/p"
  • 第二:p命名空间注入是基于setter方法的,所以需要对应的属性提供setter方法。



    

3.2c命名空间注入

c命名空间是简化构造方法注入的。

使用c命名空间的两个前提条件:

第一:需要在xml配置文件头部添加信息:xmlns:c="http://www.springframework.org/schema/c"

第二:需要提供构造方法。




    

    

4.Spring 文件中 Bean属性

id:   bean在spring容器的唯一标识,spring容器中不可能同时存在两个相同的id。

class:   类的全限定名(类名+包名),用“.”号连接

name:  设置别名,在BeanFactory的getBean(“name”)中可以获取相应的bean。

autowire :   byType   byName 基于xml自动装配

destroy-method:它的作用是在销毁bean之前可以执行指定的方法。注意:必须满足scope=“singleton”,并且destroy方法参数个数不能超过1,并且参数类型只能为boolean。

init-method:它的作用是在创建一个bean之后调用该方法,初始化方法必须是一个无参方法。

lazy-init:       lazy-init 设置只对scop属性为singleton的bean起作用,

lazy-init=”false” 立即加载, 在spring启动时,立刻进行实例.

lazy-init=”true” 延迟加载 ,设置为true的bean将不会在ApplicationContext启动时提前被实例化,而是在第一次向容器通过getBean索取bean时实例化的。

scope

默认(scope="singleton)情况下,Bean对象的创建是在初始化Spring上下文的时候就完成的。

 

执行这个ApplicationContext 创建对象了 单例
        ApplicationContext applicationContext  =
                new ClassPathXmlApplicationContext("spring-config.xml");

如果想让Spring的Bean对象以多例的形式存在,可以在bean标签中指定scope属性的值为:prototype,这样Spring会在每一次执行getBean()方法的时候创建Bean对象,调用几次则创建几次。

你可能感兴趣的:(Spring,spring,java,sql)