Spring @Configuration注释

时间:2020-01-09 10:44:33  来源:igfitidea点击:

Spring @Configuration注释有助于在Spring中创建基于Java的配置,而不是依赖于基于XML的配置。任何带有@Configuration注释的类都表明一个类声明一个或者多个@Bean方法,这些方法由Spring容器处理以生成Bean定义并管理整个Bean生命周期。

如何在Spring中使用@Configuration注释

@Configuration
public class AppConfig {
  @Bean
  public MyBean myBean() {
    return new MyBean();
  }
}

在此,AppConfig类以@Configuration进行注释,表明它声明了bean方法。在类中,该方法是myBean()并带有@Bean注释。 Spring容器创建并管理此bean实例。

如何引导@Configuration类

通常使用AnnotationConfigApplicationContext或者其支持Web的变体AnnotationConfigWebApplicationContext来引导@Configuration类。

如果我们采用上面用于AppConfig的配置并尝试对其进行引导,则可以按照以下说明进行操作

public class App {
  public static void main(String[] args) {
    AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext();
    ctx.register(AppConfig.class);
    ctx.refresh();
    MyBean myBean = ctx.getBean("myBean", MyBean.class);
    myBean.myMethod();
    ctx.close();
  }
}

MyBean.java

public class MyBean {
  public void myMethod() {
    System.out.println("In MyMethod of MyBean class");
  }
}

Spring @Configuration注释示例

这是另一个示例,显示了如何将@Configuration以及@Autowired和@Component注释一起使用。此示例显示了具有Service和DAO层的分层体系结构。

@Service
public class UserService {
	@Autowired
	UserDAO userDAO;

	public void getUsers() {
		userDAO.getUsers();
	}
}

UserDAO界面

public interface UserDAO {
	public void getUsers();
}

UserDAOImpl.java

@Repository
public class UserDAOImpl implements UserDAO {
	public void getUsers() {
		System.out.println("In getUsers method, connect to DB and get data");
	}
}

配置类

Appconfig类用@Configuration注释,表明它是提供Bean配置的类。软件包中还有一个@ComponentScan注释,用于扫描bean定义。由于使用@Repository注释的组件扫描类,@ Service,@ Component被自动注册为bean。

@Configuration
@ComponentScan(basePackages="com.theitroad")
public class AppConfig {

}

现在,我们可以使用以下类运行示例。

public class App {
	public static void main(String[] args) {
		AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext(AppConfig.class);
		UserService userService = ctx.getBean("userService", UserService.class);
		userService.getUsers();
		ctx.close();
	}
}

输出:

14:21:11.584 [main] DEBUG org.springframework.beans.factory.support.DefaultListableBeanFactory - Returning cached instance of singleton bean 'userDAO'
14:21:11.586 [main] DEBUG org.springframework.beans.factory.support.DefaultListableBeanFactory - Returning cached instance of singleton bean 'org.springframework.context.event.internalEventListenerFactory'
14:21:11.891 [main] DEBUG org.springframework.beans.factory.support.DefaultListableBeanFactory - Returning cached instance of singleton bean 'lifecycleProcessor'
14:21:11.909 [main] DEBUG org.springframework.beans.factory.support.DefaultListableBeanFactory - Returning cached instance of singleton bean 'userService'
In getUsers method, connect to DB and get data