spring 注解配置:使用classpath自动扫描把组件纳入spring容器中管理

注解配置:使用classpath自动扫描把组件纳入spring容器中管理

 

作用:在开发时对项目的每一层进行划分

前面的例子我们都是使用XMLbean定义来配置组件。在一个稍大的项目中,通常会有上百个组件,如果这些组件采用xmlbean定义来配置,显然会增加配置文件的体积,查找及维护起来也不太方便。

Spring3.0为我们引入了组件自动扫描机制,它可以在类路径底下寻找标注了@Component@Service @Controller @Repository注解的类并把这些类纳入进spring容器中管理

它的作用和在xml文件中使用bean节点配置组件是一样的。

要使用自动扫描机制,我们需要打开以下配置信息:

1】引入context命名空间  需要在xml配置文件中配置以下信息:

<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:component-scan base-package="cn.itcast"/>

</beans>

2】在配置文件中添加context:component-scan标签

       <context:component-scan base-package="cn.itcast"/>

其中base-package为需要扫描的包(含子包)

:

1、在使用组件扫描元素时,

AutowiredAnnotationBeanPostProcessor CommonAnnotationBeanPostProcessor会隐式地被包括进来。也就是说,个组件都会被自动检测织入,所有这一切都不需要在XML中提供任何bean配置元数据。 

 

2、功能介绍

@Service 用于标注业务层组件、

@Controller用于标注控制层组件(如struts中的action)、

@Repository用于标注数据访问组件,即DAO组件。

@Component泛指组件,当组件不好归类的时候,我们可以使用这个注解进行标注。

spring 注解配置:使用classpath自动扫描把组件纳入spring容器中管理_第1张图片

 

3】测试代码

结构:

IUserDao接口

public interface IUserDao {

public void save();

}

 

UserDaoImpl

/**

 * @Repository标注在类的上面

 * 相当于spring容器中定义:

 * <bean id="userDaoImpl" class="cn.itcast.dao.UserDaoImpl"></bean>

 * 此时如果没有为@Repository指定value属性的名称,此时就是按照类的名称作为spring容器中bean节点的id,并且首字母要小些

 * 

 * @Repository(value="userDao")

 * 相当于spring容器中定义:

 * <bean id="userDao" class="cn.itcast.dao.UserDaoImpl"></bean>

 */

@Repository(value="userDao")

public class UserDaoImpl implements IUserDao {

 

public void save() {

System.out.println("执行UserDaoImpl类的save()方法!");

}

 

}

 

IUserService接口

public interface IUserService {

 

public void saveUser();

}

 

UserServiceImpl

/**

 * @Service标注在类的上面

 * 相当于spring容器中定义:

 * <bean id="userServiceImpl" class="cn.itcast.service.UserServiceImpl"></bean>

 * 此时如果没有为@Service指定value属性的名称,此时就是按照类的名称作为spring容器中bean节点的id,并且首字母要小些

 * 

 * @Service(userService)

 * 相当于spring容器中定义:

 * <bean id="userService" class="cn.itcast.service.UserServiceImpl"></bean>

 * 

 * 再添加@Resource(name="userDao")

 * 此时表示

 * <bean id="userService" class="cn.itcast.service.UserServiceImpl">

 *    <property name="userDao" ref="userDao">

 * </bean>

 */

@Service("userService")

public class UserServiceImpl implements IUserService {

@Resource(name="userDao")

private IUserDao userDao;

 

public void saveUser() {

System.out.println("执行UserServiceImpl类的saveUser()的方法!");

userDao.save();

}

}

Spring容器的配置(beans.xml

<?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">

    

    <!-- 

     java代码中使用@Autowired@Resource注解方式进行装配的前提条件是。

         1、引入context命名空间  需要在xml配置文件中配置以下信息:

         2、在配置文件中添加context:annotation-config标签

             这个配置隐式注册了多个对注解进行解析处理的处理器

     -->

    <context:annotation-config/>

    

    <!-- 创建DAO

<bean id="userDao" class="cn.itcast.dao.UserDaoImpl"></bean> -->

<!-- 创建Service 

<bean id="userService" class="cn.itcast.service.UserServiceImpl">

 <property name="userDao" ref="userDao"></property>

</bean>

-->

</beans>

测试类App.java

public class App {

public static void main(String[] args) {

//调用Service

//加载spring容器:

ApplicationContext ac = new ClassPathXmlApplicationContext("beans.xml");

IUserService userService = (IUserService)ac.getBean("userService");

userService.saveUser();

}

}

 

功能介绍

@Service用于标注业务层组件、

@Controller用于标注控制层组件struts中的action

@Repository用于标注数据访问组件DAO组件。

@Component泛指组件当组件不好归类的时候我们可以使用这个注解进行标注。

 

你可能感兴趣的:(spring)