spring之通过注解方式配置Bean(一)
(1)组件扫描:spring能够从classpath下自动扫描、侦测和实例化具有特定注解的组件。 (2)特定组件包括:
(3)对于扫描到的组件,spring有默认的命名规则:使用非限定类名。第一个字母小写,也可以在注解中通过value属性值标识组件的名称。 (4)当在组件类上使用了特定的注解之后,还需要在spring的配置文件中声明<context:component-scan>:
一、所需环境 引入以下jar包,加入到build path中: 两个连接数据库的,五个spring核心包,aop是额外的使用注解方式需要引入的包,一定要记得引入这个包。 基本目录如下: 二、基本配置 TestObjec.java package com.gong.spring.beans.annotation; import org.springframework.stereotype.Component; @Component public class TestObject { } UserController.java com.gong.spring.beans.annotation.controller; org.springframework.stereotype.Controller; @Controller UserController { void execute() { System.out.println("UserController的execute方法"); } } UserRepository.java com.gong.spring.beans.annotation.repository; interface UserRepository { save(); } UserRepositoryImpl.java org.springframework.stereotype.Repository; //可以指定使用时的名字 @Repository(value="userRepository") class UserRepositoryImpl implements UserRepository{ @Override save() { TODO Auto-generated method stub System.out.println("UserReposityImpl的save方法"); } } UserService.java com.gong.spring.beans.annotation.service; org.springframework.stereotype.Service; @Service UserService { add() { System.out.println("UserService中的add方法"); } } Main.java org.springframework.context.ApplicationContext; org.springframework.context.support.ClassPathXmlApplicationContext; com.gong.spring.beans.annotation.controller.UserController; com.gong.spring.beans.annotation.repository.UserRepository; com.gong.spring.beans.annotation.service.UserService; Main { static main(String[] args) { 1.创建spring的IOC容器对象 ApplicationContext ctx = new ClassPathXmlApplicationContext("beans-annotation.xml"); 2.从容器中获取Bean实例 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); } } ?beans-annotation.xml(需要引入context命名空间) <?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.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.3.xsd"> <!-- 配置springIOC容器扫描的包 --> context:component-scan base-package="com.gong.spring.beans.annotation"></context:component-scan> </beans> 输出: 说明这些带有注解的类已经被spring所识别并被IOC容器所管理。需要注意的是,默认情况下获取bean的实例时,名字是类名,但首字母是小写。例如TestObject通过getBean("testObject")来获取,当然,也可以在注解时使用value属性来声明bean的名字。 三、子节点配置 再来看: ="com.gong.spring.beans.annotation" resource-pattern="repository/*.class"> 指定扫描的模式之后,我们就只能访问到repository下面的组件了,即输出: 在<context:include-filter>和<context:exclude-filter>子节点支持多种类型的表达式:
(1)使用annotation的方式 > context:exclude-filter type="annotation" expression="org.springframework.stereotype.Repository"/> > 不包含org.springframework.stereotype.Repository,即输出: use-default-filters="false"context:include-filter > 只包含org.springframework.stereotype.Repository,注意需要配置use-default-filters为false,即输出: (2)使用assignable方式 ="assignable"="com.gong.spring.beans.annotation.repository.UserRepository"> 不包含UserRepository接口及其实现类的。 >
设置use-default-filters="false"。只包含UserRepository接口及其实现类的。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |