Spring Beans的安装与依赖注入

2020-06-09  本文已影响0人  HeapOverflow
Bean与Spring容器之间的关系

Spring IoC容器中,bean的连线可以通过以下三种方式完成:

  1. 完全基于xml配置文件:bean的安装和依赖的注入都是通过xml文件进行配置,如:
<?xml version="1.0" encoding="UTF-8"?>

<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://www.springframework.org/schema/beans
    http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">

   <bean id="john-classic" class="com.example.Man">
      <property name="name" value="John Doe"/>
      <property name="wife" ref="jane"/>
   </bean>

   <bean name="jane" class="com.example.Women">
      <property name="name" value="John Doe"/>
   </bean>

</beans>

2、xml文件与注解配合:与1的区别是,无需在bean安装时指定属性的赋值,只需要定义Class时,在属性上使用@Autowire注解,同时需要通过以下配置启用。

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

<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:context="http://www.springframework.org/schema/context"
    xsi:schemaLocation="http://www.springframework.org/schema/beans
    http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
    http://www.springframework.org/schema/context
    http://www.springframework.org/schema/context/spring-context-3.0.xsd">

   <context:annotation-config/>
   <!-- bean definitions go here -->

</beans>

Class定义:

import org.springframework.beans.factory.annotation.Autowired;
public class Man {
  @Autowired
  private Women wife;
}
  1. 完全基于注解: @Configuration 和 @Bean 注解,不需要任何配置文件

@Configuration注解应用于类,表示这个类可以使用Spring IoC容器作为bean定义的来源。
@Bean注解应用于方法,告诉Spring这个方法返回的对象将作为bean注册在Spring容器(Spring应用上下文),方法名为bean id。

package com.tutorialspoint;
import org.springframework.context.annotation.*;
@Configuration
public class HelloWorldConfig {
   @Bean 
   public HelloWorld helloWorld(){
      return new HelloWorld();
   }
}

上面的代码将等同于下面的 XML 配置:

<beans>
   <bean id="helloWorld" class="com.tutorialspoint.HelloWorld" />
</beans>

如需添加生命周期的回调方法,可同过注解的属性配置(默认即为单实例,可不指定作用域):

public class Foo {
   public void init() {
      // initialization logic
   }
   public void cleanup() {
      // destruction logic
   }
}

@Configuration
public class AppConfig {
   @Bean(initMethod = "init", destroyMethod = "cleanup" )
   @Scope("prototype")
   public Foo foo() {
      return new Foo();
   }
}
上一篇下一篇

猜你喜欢

热点阅读