Spring4学习(三):注解配置bean

一、注解基础

1、组件扫描(component scanning)

Spring能够从classpath下自动扫描,侦测和实例化具有特定注解的组件

2、特定组件包括

- @Component 基本注解,标示一个受spring管理的组件

- @Respository 标识持久层组件

- @Service 标识服务层(业务层)组件

- @Controller 标识表现层组件

3、spring配置文件中声明<context:component-scan>

- base-package属性指定一个需要扫描的基类包,Spring容器将会扫描这个基类包及其子包中的所有类

- 当需要扫描多个包时,可用使用逗号分隔

如果仅希望扫描特定的类而非基包下的所有类,可用使用resource-pattern属性过滤特定的类,例如

<context:component-scan

      base-package="io.spring.beans"

      resource-pattern="autowire/*.class" />

- <context:include-filter>子节点表示要包含的目标类

- <context:exclude-filter>子节点表示要排除在外的目标类

- <context:component-scan>下可以拥有若干<context:include-filter>和<context:exclude-filter>子节点


二、创建实例

1、首先引入 spring-aop-4.2.5.RELEASE.jar 


2、新建io.spring.annotation包,创建TestObject.java 和 Main.java

package io.spring.annotation;

import org.springframework.stereotype.Component;

/** 
 * @author 胖胖のALEX E-mail:[email protected] 
 * @date 2016年4月7日 下午11:03:29 
 * @version 1.0 
*/
@Component
public class TestObject {

}

Main.java

package io.spring.annotation;

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

import io.spring.annotation.controller.UserController;
import io.spring.annotation.repository.UserRepository;
import io.spring.annotation.service.UserService;

/** 
 * @author 胖胖のALEX E-mail:[email protected] 
 * @date 2016年4月7日 下午11:10:34 
 * @version 1.0 
*/
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);
		
		UserRepository userRepository = (UserRepository) ctx.getBean("userRepository");
		System.out.println(userRepository);
		
		UserService userService = (UserService) ctx.getBean("userService");
		System.out.println(userService);
		
	}
	
}
3、新建io.spring.repository包,创建文件UserRepository.java、UserRepositoryImpl.java

package io.spring.annotation.repository;
/** 
 * @author 胖胖のALEX E-mail:[email protected] 
 * @date 2016年4月7日 下午11:04:47 
 * @version 1.0 
*/
public interface UserRepository {
	
	public void save();
	
}
UserRepositoryImpl.java

package io.spring.annotation.repository;

import org.springframework.stereotype.Repository;

/** 
 * @author 胖胖のALEX E-mail:[email protected] 
 * @date 2016年4月7日 下午11:05:40 
 * @version 1.0 
*/
@Repository("userRepository")
public class UserRepositoryImpl implements UserRepository {

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

}
4、新建io.spring.service包,新建UserService.java

package io.spring.annotation.service;

import org.springframework.stereotype.Service;

/** 
 * @author 胖胖のALEX E-mail:[email protected] 
 * @date 2016年4月7日 下午11:06:33 
 * @version 1.0 
*/
@Service
public class UserService {
	
	public void add() {
		System.out.println("UserService add...");
	}
	
}
5、新建io.spring.controller包,新建UserController.java

package io.spring.annotation.controller;

import org.springframework.stereotype.Controller;

/** 
 * @author 胖胖のALEX E-mail:[email protected] 
 * @date 2016年4月7日 下午11:07:17 
 * @version 1.0 
*/
@Controller
public class UserController {
	
	public void execute() {
		System.out.println("UserController execute...");
	}
}

6、执行Main.java,正确结果如下:



三、组件装配 @AutoWire  @Resource

使用@AutoWire修改上面的例子

1、io.spring.annotation.repository

package io.spring.annotation.repository;
/** 
 * @author 胖胖のALEX E-mail:[email protected] 
 * @date 2016年4月7日 下午11:04:47 
 * @version 1.0 
*/
public interface UserRepository {
	
	public void save();
	
}

package io.spring.annotation.repository;

import org.springframework.stereotype.Repository;

/** 
 * @author 胖胖のALEX E-mail:[email protected] 
 * @date 2016年4月7日 下午11:05:40 
 * @version 1.0 
*/
@Repository("userRepository")
public class UserRepositoryImpl implements UserRepository {

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

}

2、io.spring.annotation.service

package io.spring.annotation.service;

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

import io.spring.annotation.repository.UserRepository;

/** 
 * @author 胖胖のALEX E-mail:[email protected] 
 * @date 2016年4月7日 下午11:06:33 
 * @version 1.0 
*/
@Service
public class UserService {
	
	@Autowired
	private UserRepository userRepository;
	
	
	public void add() {
		System.out.println("UserService add...");
		userRepository.save();
	}
	
}
3、io.spring.annotation.controller

package io.spring.annotation.controller;

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

import io.spring.annotation.service.UserService;

/** 
 * @author 胖胖のALEX E-mail:[email protected] 
 * @date 2016年4月7日 下午11:07:17 
 * @version 1.0 
*/
@Controller
public class UserController {
	
	@Autowired
	private UserService userService;
	
	
	public void execute() {
		System.out.println("UserController execute...");
		userService.add();
	}
}

4、io.spring.annotation

package io.spring.annotation;

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

import io.spring.annotation.controller.UserController;
import io.spring.annotation.repository.UserRepository;
import io.spring.annotation.service.UserService;

/** 
 * @author 胖胖のALEX E-mail:[email protected] 
 * @date 2016年4月7日 下午11:10:34 
 * @version 1.0 
*/
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);
		userController.execute();
//		
//		UserRepository userRepository = (UserRepository) ctx.getBean("userRepository");
//		System.out.println(userRepository);
//		
//		UserService userService = (UserService) ctx.getBean("userService");
//		System.out.println(userService);
		
	}
	
}

输入结果:



你可能感兴趣的:(spring)