Spring入门(7)-自动检测Bean

Spring入门(7)-自动检测Bean

本文介绍如何自动检测Bean。

0. 目录

  1. 使用component-scan自动扫描
  2. 为自动检测标注Bean

1. 使用component-scan自动扫描

<?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/>
	<context:component-scan base-package="com.chzhao.springtest"/>
</beans>

注:<context:annotation-config/>也可以去掉

package com.chzhao.springtest;

public interface IPersonBll {
	void show();
}


package com.chzhao.springtest;

import org.springframework.stereotype.Service;

@Service
public class PersonBll implements IPersonBll {
	public void show() {
		System.out.println("show message");
	}
}

package com.chzhao.springtest;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

@Service
public class App {

	@Autowired
	private IPersonBll personBll;

	public IPersonBll getPersonBll() {
		return personBll;
	}

	public void setPersonBll(IPersonBll personBll) {
		this.personBll = personBll;
	}

	public void showMsg() {
		this.personBll.show();
	}

}

package com.chzhao.springtest;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class Main {
	public static void main(String[] args) {
		ApplicationContext act = new ClassPathXmlApplicationContext(
				"applicationContext.xml");
		
		App a = (App) act.getBean(App.class);
		a.showMsg();
	}
}

2. 为自动检测标注Bean

context:component-scan会自动检测如下注解:

  • @Component:通用的构造型注解,标识该类为Spring组件
  • @Controller:标识该类为Spring MVC controller
  • @Repository:标识该类为数据仓库
  • @Service:标识此类定义为服务

@Component可以标注任意自定义注解,同时也可以命名Bean的ID。

package com.chzhao.springtest;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

@Component("app1")
public class App {

	@Autowired
	private IPersonBll personBll;

	public IPersonBll getPersonBll() {
		return personBll;
	}

	public void setPersonBll(IPersonBll personBll) {
		this.personBll = personBll;
	}

	public void showMsg() {
		this.personBll.show();
	}

}

package com.chzhao.springtest;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class Main {
	public static void main(String[] args) {
		@SuppressWarnings("resource")
		ApplicationContext act = new ClassPathXmlApplicationContext(
				"applicationContext.xml");
		
		App a = (App) act.getBean("app1");
		a.showMsg();
	}
}
原文地址:https://www.cnblogs.com/wardensky/p/4199407.html