Spring依赖注入Dependency Injection(DI)

Spring出现无法读取文档问题:

在这里插入图片描述原因:系统自带的打包插件只能把代码打包,不能把项目的依赖打包,导致无法加载本地的xsd文件,然后到网上找,但也不能找到就会报错,无法启动项目。
解决方法
1、在pom.xml中标签下引入新的打包插件:


      
        org.apache.maven.plugins
        maven-shade-plugin
      
 

2、在标签下的中添加插件配置:

 
          org.apache.maven.plugins
          maven-shade-plugin
          2.4.3
          
            
              package
              
                shade
              
              
                
                  
                    com.lanou3g.spring.App
                  
                  
                    META-INF/spring.schemas
                  
                  
                    META-INF/spring.handlers
                  
                
              
            
          
        

懒加载(lazy-init)

SpringIOC容器默认会在启动的时候初始化我们配置的所有bean,但有时我们想让一些bean延迟初始化的时机,在我们getBean的时候再初始化。
这时就需要使用懒加载,在bean上面添加lazy-init属性,属性值可以是true、false、default。 默认情况是false。



也可以设置全局的bean懒加载默认值


    

注解配置导入xml配置

通过注解获取上下文时:

AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext(StudentServiceImpl.class);

在注解中使用@ImportResource可以导入xml配置

@Configuration("ssdi")
@ComponentScan(basePackages = "com.lanou3g.spring")
@Scope("prototype") // 作用域,单例或者非单例
@ImportResource("applicationContext.xml")

bean的name属性

除了为bean添加id外,也可以添加name作为bean的标识,在getBean时使用,name可以同时设置多个值,而且不同的bean的name不能相同。


        
        
        

注入匿名内部bean

不通过ref方式引入外部的bean,而是直接用内部bean的方式注入


    
    
         
            
            
        
    
  	
  	
    
         
            
            
         
    

注入集合类型属性

通过标签对属性注入java中的List、Set、Map、Properties集合类型
可改变value的type类型,从而设置不同的值类型

		
    
        
          	a list element followed by a reference
          	55
          	
        
    
    
        
          	
            
        
    
    
        
            just some string
            
        
    
    
        
            [email protected]
            [email protected]
            [email protected]
        
    

注入null、空字符串类型属性值

注入null时使用标签,注入空字符串时value的值为空


    



    
        
    

注入复合属性值

有一个JinSaiSai类中有一个yinSaiSai属性,yinSaiSai属性中又包含了一个age属性,需要给age属性赋值25


	
            
    
    

注入外部properties文件中的属性值

通过PropertyPlaceholderConfigurer工具类注入Properties文件中的属性




        
        
        
        

jdbc.properties

jdbc.driver.className=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/mydb
jdbc.username=root
jdbc.password=root
jdbc.maxIdle=3
jdbc.minIdle=1
jdbc.maxActive=10

通过p或c命名空间注入属性

先在beans中添加p和c的schema


使用p和c代替标签



    
    

    
    
    
    

使用p命名空间比上面一种更简洁,但是它在编写的时候需要使用支持自动提示的IDE(如IDEA、STS),否则在编写时很容易拼写错误,只能到运行期才发现。

你可能感兴趣的:(Spring依赖注入Dependency Injection(DI))