基于注解的方式配置Bean

一:在classpath中扫描组件

1.组件扫描(component scanning):spring能够从classpath下自动扫描,侦测和实例化具有特定注解的组件。

2.特定的组件包括:

  • @Component:基本注解,标识了一个受spring管理的组件。
  • @Repository:标识持久层组件
  • @Service:标识服务层(业务层)组件
  • @Controller:标识表现层组件

3.对于扫描到的组件,spring有默认的命名策略,使用非限定类名,第一个字母小写,也可以在注解中通过value属性值标识组件的名称。(例子 UserController的bean名称就是userController,可以通过形式赋值@Repository("userRepository"))

二:注解属性配置

1.当在组件类中使用了特定的注解之后,还需要在spring中配置文件中声明context:component-scan(注意要先导入命名空间context)

  • base-package:指定一个需要扫描的基类包,spring容器将会扫描这个基类包里以及子包中的所有类,当需要扫描多个包时,可以使用逗号分隔。
  • 如果仅希望扫描特定的类而非基包下的所有类,可以使用resource-pattern属性过滤特定的类
    
    
    	
    	
    	
    	
    	 
    
    
    
  • context:include-filter:子节点表示要包含的目标类,通过要配合 use-default-filters配合使用
  • context:exclude-filter 子节点表示要排除在外的目标类
  • context:component-scan下可以拥有若干个context:include-filter和context:exclude-filter子节点

 三:代码实现

1.创建一个TestObject类并加上@Component注解

package com.dhx.annotation;

import org.springframework.stereotype.Component;

@Component
public class TestObject {

}

2.创建一个UserController类并加上@Controller注解

package com.dhx.annotation.controller;

import org.springframework.stereotype.Controller;

@Controller
public class UserController {
	
	public void execute() {
		System.out.println("UserController Execute ...");
	}

}

3. 创建一个UserRepository接口,实现这个类并加上@Repository注解

package com.dhx.annotation.repository;

public interface UserRepository {
		
		void save();
}
package com.dhx.annotation.repository;

import org.springframework.stereotype.Repository;

@Repository("userRepository")//spring bean的名称
public class UserRepositoryimpl implements UserRepository {

	@Override
	public void save() {
		System.out.println("UserRepository Save ...");
	}

}

4.  创建一个UserService类,并加上注解@Service

package com.dhx.annotation.service;

import org.springframework.stereotype.Service;

@Service
public class UserService {
	
	public void add() {
		System.out.println("UserService add ...");
	}

}

 5.配置XML文件,要导入context命名空间



	
	
	
	
	
	
	
	
	 
	
	
	
	
	
	
	
		
	
	
	
	

6.测试

package com.dhx.annotation;

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

import com.dhx.annotation.controller.UserController;
import com.dhx.annotation.repository.UserRepository;
import com.dhx.annotation.repository.UserRepositoryimpl;
import com.dhx.annotation.service.UserService;

public class Main {
	
	public static void main(String[] args) {
		
		ApplicationContext ctx=new ClassPathXmlApplicationContext("beans-annotation.xml");
		
		
		TestObject to=(TestObject) ctx.getBean("testObject");
		System.out.println(to);
		
		UserController userController=(UserController) ctx.getBean("userController");
		System.out.println(userController);
		
		
		UserService userService=(UserService) ctx.getBean("userService");
		System.out.println(userService);
		
		UserRepository userRepository=(UserRepository) ctx.getBean("userRepository");
		System.out.println(userRepository);
		
		
	}

}

 

  •  

     

     

你可能感兴趣的:(spring)