一、注解基础
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 { }
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..."); } }
三、组件装配 @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..."); } }
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(); } }
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); } }