Spring学习----注解

背景:

传统的Spring做法是使用.xml文件来对bean进行注入或者是配置aop、事物,这么做有两个缺点:

1、如果所有的内容都配置在.xml文件中,那么.xml文件将会十分庞大;如果按需求分开.xml文件,那么.xml文件又会非常多。总之这将导致配置文件的可读性与可维护性变得很低。
2、在开发中在.java文件和.xml文件之间不断切换,是一件麻烦的事,同时这种思维上的不连贯也会降低开发的效率。
为了解决这两个问题,Spring引入了注解,通过"@XXX"的方式,让注解与Java Bean紧密结合,既大大减少了配置文件的体积,又增加了Java Bean的可读性与内聚性。

注解方式可以简化spring的IOC容器的配置

使用注解步骤:

         1)先引入context名称空间

                   xmlns:context="http://www.springframework.org/schema/context"

         2)开启注解扫描

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

         3)使用注解

                   通过注解的方式,把对象加入ioc容器

 

 创建对象以及处理对象依赖关系,相关的注解:

@Component   指定把一个对象加入IOC容器

@Repository   作用同@Component; 在持久层使用

@Service      作用同@Component; 在业务逻辑层使用

@Controller    作用同@Component; 在控制层使用

@Resource     属性注入

例子:

 bean.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:p="http://www.springframework.org/schema/p"
    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.xsd">
    
    <!-- 开启注解扫描 -->
    <context:component-scan base-package="cn.itcast.e_anno2"></context:component-scan>
        
</beans>      

 

UserDao:

 

package cn.itcast.e_anno2;

import org.springframework.stereotype.Repository;

@Repository
// 在持久层可以选择用这个注解
public class UserDao {

    public UserDao() {
        System.out.println("UserDao.UserDao()");
    }

    public UserDao(int id) {
        System.out.println("UserDao.UserDao(int id)" + id);
    }

    public void save() {
        System.out.println("DB:保存用户!!!");
    }
}

 

 

 

UserService:

 

package cn.itcast.e_anno2;

import javax.annotation.Resource;

import org.springframework.stereotype.Service;

@Service
// 表示业务逻辑层的组件
public class UserService {

    // @Resource // 根据类型查找 【在容器中要确保该类型只有一个变量】   两种方式都可以
    @Resource(name = "userDao")
    // 根据名称查找
    private UserDao userDao; // 去容器中招UserDao类型的变量,找到后就赋值

    public void save() {
        userDao.save();
    }
}

 

 

 

UserAction:

 

package cn.itcast.e_anno2;

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

//@Component("userAction")  // 加入IOC容器

//@Component

@Controller
// 控制层的组件
public class UserAction {

    @Autowired
    private UserService userService;

    public String execute() {
        userService.save();
        return null;
    }
}

 

 

测试类:

 

package cn.itcast.e_anno2;

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

public class App {

    // 创建容器对象
    private ApplicationContext ac = new ClassPathXmlApplicationContext(
            "cn/itcast/e_anno2/bean.xml");

    @Test
    public void testExecuteAction() {
        // 从容器中获取Action
        UserAction userAction = (UserAction) ac.getBean("userAction");
        userAction.execute();
    }
}

 

 

总结:

         1) 使用注解,可以简化配置,且可以把对象加入IOC容器,及处理依赖关系(DI)
         2) 注解可以和XML配置一起使用。

posted @ 2017-07-11 15:34  杯酒故人  阅读(160)  评论(0编辑  收藏  举报