Spring - SpringIOC容器详解

论坛 期权论坛 脚本     
匿名网站用户   2020-12-21 07:58   147   0

一、什么是Spring IOC:
Ioc—Inversion of Control,即“控制反转”,不是什么技术,而是一种设计思想。

在Java开发中,Ioc意味着将你设计好的对象交给容器控制,而不是传统的在你的对象内部直接控制。

二、Spring中如何实现DI(依赖注入)
  1.构造器注入



2.Setter注入



3.接口注入:不常用,例如JNDI注入tomcat自带数据库连接池

三、XML配置Bean
  0.命名空间

<?xml version="1.0" encoding="UTF-8"?>


  1.装配简易值和对象

  
  

  2.装配集合

    
      
        value
        //
      
    
    
      
        value        //
      
        
      
        value
      
                                              //        //
      

                      value1          

四、注解配置Bean
  1.@Component 配置Bean

配置在类上,代表这个类会被SpringIOC扫描成一个Bean,注解中属性value表示为Bean的名字,如同XML中配置的id,不配置

value的值时,默认是将类名的首字母小写。

@Component

@Component(“beanName”)

2.@ComponentScan 配置注解扫描器

配置在类上,因为SpringIOC容器并不知道要扫描哪个类和包,需要定义一个SpringConfig类来告诉它,注解默认扫描该类所在包

如果想扫描指定包,注解属性basePackages中,多个包,使用逗号隔开

@ComponentScan

@ComponentScan(basePackages={“包1”,“包2”})

3.@Value 简单值注入

配置在类的字段(属性)上,其中放入的是字符串,注入时会自动转换类型,同样可以使用EL表达式来注入资源属性文件中的值

@Value(“1”)

@Value(“xxxx”)

@Value("${jdbc.database.driver}")

4.@Autowired  自动装配属性

配置在类的字段(属性)上、方法及构造函数的参数中完成自动装配的工作,可以通过 @Autowired的使用来消除 setter ,getter方法

此注解是按照类型来注入的,当有多个bean同时实现一个接口时,可以使用@Primary和@Qualifier注解来消除歧义。

@Autowired

5.@Primary 优先注入

配置在某个接口有多个实现类的某个实现类上,在其他Bean中使用@Autowired注入该接口类型的bean时,优先注入这个实现类的bean。

和@Component一起使用,否则无效。

6.@Qualifier 指定注入

配置在类的字段(属性)上,和@Autowired一起使用,当@Autowired注入时,指定注入的bean,该注解的属性(value)指定Bean的name

@Qualifier(“beanName”)

7.@Configration 配置菜单

配置在类上,此注解通常为了通过 @Bean 注解生成 SpringIOC容器管理的类,本质和@Component一样。

@Configration

8.@Bean   配置第三方类的Bean

配置在方法上,将方法返回的对象生成Bean,交给SpringIOC容器管理,要求此方法所在类也被配置成Bean,通常使用@Configration,

注解的属性name,指定生成的Bean的name

@Bean(name=“beanName”)

9.@Resource(name=“beanName”)  jdk的自动装配

相当于@Autowired,区别在于Resource先按beanName来找注入的Bean,如果没有指定名字的Bean,再按照类型来注入。

五、启动SpringIOC容器的方式    
  1.Spring采用xml配置时,根据xml文件来启动

1
ApplicationContext ac = new ClassPathXmlApplicationContext(“spring-config.xml”);
ClassName cn = (ClassName)ac.getBean(“beanName”);
  2.Spring采用注解配置时,根据Springconfig配置类来启动
ApplicationContext ac = new AnnotationConfigApplicationContext(SpringConfig.class);
ClassName cn = (ClassName)ac.getBean(“beanName”);

六、注解和XML的混合使用
   1.注解引用XML

@ImportResource({“classpath:spring-config.xml”,“classpath:spring-config1.xml”}),配置在SpringConfig类上

2.多个注解配置类

@Import({SpringConfig1.class,SpringConfig2.class})

3.XML扫描注解 
<context:component-scan base-packages=“包名1,包名2”/>
   4.多个XML文件


七、加载属性文件
·  1.XML加载资源属性文件
<context:property-placeholder ignore-resource-not-found=“true” location=“classpath:database-config.properties”/>
  2.注解加载资源属性文件

@PropertySource(value={“classpath:database-config.properties”},ignoreResourceNotFound=“true”)

value={“classpath:database-config.properties”} : 资源属性文件位置

ignoreResourceNotFound=“true”  : 当扫描不到此资源配置文件时,不报错

八、Bean的作用域
  Spring提供了4种作用域:singleton(单例) prototype(原型) Session(会话) request(请求)

XML中的bean中有属性:scope ,默认是单例,可以设置为原型。会话和请求的作用域需要在web.xml中配置

注解中有注解@Scope(“singleton”),@Scope(“prototype”),默认是单例,可以设置为原型。
深圳网站建设https://www.sz886.com

分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:1136255
帖子:227251
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP