第二章 IoC Annotation注入

1、命名空间

使用Annotation的方式,需要在spring的配置文件中配置命名空间。命名空间中,隐式地注册了多个对注解进行解析处理的处理器。

a、引入context命名空间

<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-3.0.xsd
		http://www.springframework.org/schema/context
                http://www.springframework.org/schema/context/spring-context-3.0.xsd">

b、打开注解功能

<context:annotation-config />

2、@Autowired与@Resource

          @Autowired与@Resource在使用上是没有任何区别的。即可以放于属性声明之前,也可以放于属性的setter方法头上。

     只是@Autowired注解是由Spring提供的,它是按类型进行装配。而@Resource是由JavaEE提供的,它是按属性的名字进行装配,找不到名字后再找类型按类型装配。

          @Autowired是推荐使用的。

3、具体使用:

UserDao与UserDaoImpl:

[java] view
plain
copyprint?

  1. public interface UserDao {    
  2.     public void save();    
  3. }    

[html] view
plain
copyprint?

  1. public class UserDaoImpl implements UserDao {    
  2.     public void save() {    
  3.         System.out.println("保存用户...");    
  4.     }    
  5. }    

UserService接口及其实现类UserServiceImpl:

[java] view
plain
copyprint?

  1. public interface UserService {    
  2.     public void addUser();    
  3. }    

在UserServiceImpl中使用注解把UserDao对象注入进来使用。

public class UserServiceImpl implements UserService {
    //1
    @Autowired private UserDao userDao;

    public UserServiceImpl(UserDao userDao, String username) {
        this.userDao = userDao;
        this.username = username;
    }  

    public void addUser() {
        System.out.println(username);
        userDao.save();
    }
} 

在上面注释1的地方还可以替换成以下几种方式:

@Autowired
	public void setUserDao(UserDao userDao) {
		this.userDao = userDao;
	}

@Resource private UserDao userDao;

@Resource
	public void setUserDao(UserDao userDao) {
		this.userDao = userDao;
	}

配置文件:

 <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-3.0.xsd
   http://www.springframework.org/schema/context
         http://www.springframework.org/schema/context/spring-context-3.0.xsd">
    <context:annotation-config />

    <!--  配置文件中,UserDaoImpl与UserServiceImpl是相互对立,没有任何关系的。-->
    <bean id="userDao" class="cn.framelife.spring.dao.impl.UserDaoImpl"></bean>
    <bean id="userService" class="cn.framelife.spring.service.impl.UserServiceImpl"></bean>

<beans>

4、注意:

1、使用注解功能,必须是JDK5.0及以上版本。

2、一般来说,基本数据类型的属性不使用Annotation的方式注入,Annotation只用于Bean的装配。而且,如果不是必须,基本数据类型的属性一般不使用注入的方式。

时间: 2024-09-16 15:08:27

第二章 IoC Annotation注入的相关文章

第二章 IoC 构造器注入

UserDao与UserDaoImpl: public interface UserDao { public void save(); } public class UserDaoImpl implements UserDao { public void save() { System.out.println("保存用户..."); } } UserService接口及其实现类UserServiceImpl: public interface UserService { public

第二章 IoC 概念与简单的使用

2.1 IoC的概念         Inverseof Control,控制反转是Spring容器的内核,AOP.声明式事务等功能都是在此基础上进行的.         IoC主要功能是依赖关系的转移.应用的本身不负责依赖对象的创建和维护,而是由Spring容器负责.控制权就由应用转移到了外部容器.         IoC的主要功能由控制反转来解释并不是很好理解.所以提出了新的概念DependencyInjection.         DI依赖注入,调用类对某一接口实现类的依赖关系由第三方(

第二章 IoC Bean的初始化与延迟加载

在默认情况下,Spring的ApplicationContext容器在启动的时候,会自动实例化所有singleton的Bean并缓存在容器中.虽然启动时会花费一些时间,但带来两个好处: 1.对Bean提前实例化操作会及早发现一些潜在的配置问题: 2.Bean以缓存的方式保存,当运行期使用到该Bean的时候无需再实例化,加快运行的效率. 如果用户不希望容器启动的时候提前实例化singleton的Bean,可以通过lazy-init属性进行控制: <bean id="userDao"

第二章 IoC 三种实例化Bean的方式

2.3.1使用类构造器实例化(最经常使用) 类似2.2中的使用:http://blog.csdn.net/p_3er/article/details/9091577 <bean id="userDao" class="cn.framelife.spring.dao.impl.UserDaoImpl"></bean> 注:这里的id也可以换成name <bean name="userDao" class="c

第二章 IoC Spring自动扫描和管理Bean

通过Spring容器自动扫描和管理Bean,我们不再需要在配置文件中使用<bean>标签管理Bean. 2.9.1引入context命名空间 如何引入命名空间及命名空间的写法已经在之前的章节中详细说过.具体可参考以下: http://blog.csdn.net/p_3er/article/details/9231307 2.9.2打开扫描功能 <context:component-scan base-package="cn.framelife.spring"/>

第二章 IoC Bean的作用域

作用域的配置(scope的内容): <bean id="userDao" class="cn.framelife.spring.dao.impl.UserDaoImpl" scope="singleton"></bean> 2.4.1singleton单例(默认) 整个Spring容器服务中只有一个Bean对象.一般情况下都使用这种作用域. 2.4.2 prototype 每次从容器中获取到的都是一个新的实例.相当于每次都

Android艺术开发探索——第二章:IPC机制(下)

Android艺术开发探索--第二章:IPC机制(下) 我们继续来讲IPC机制,在本篇中你将会学习到 ContentProvider Socket Binder连接池 一.使用ContentProvider ContentProvider是Android中提供的专门用来不同应用之间数据共享的方式,从这一点来看,他天生就是适合进程间通信,和Messenger一样,ContentProvider的底层实现同样也是Binder,由此可见,Binder在Android系统中是何等的重要,虽然Conten

第二章 单元测试的基本概念和核心技法

第二章 单元测试的基本概念和核心技法 2.1 良好的单元测试--定义 我们已经了解了程序员需要单元测试,下面我们来给单元测试作一个完整的定义: ● 定义: 单元测试是一段自动执行的代码,它调用被测类或被测方法,然后验证关于被测类或被测方法逻辑行为的假设确实成立.单元测试几乎总是用单元测试框架(unit testing framework)来写就的,单元测试是易于写就.执行快速.完全自动化.值得依赖.易于阅读并易于维护的. 这个定义有点长,但是它却包含了大量重要信息: ● 单元测试的测试重点是被测

第二章、进程的描述与控制

第二章.进程的描述与控制 2.1 前趋图和程序执行 2.1.1 前趋图 概念: 所谓前趋图:指一个有向无循环图(DAG),它用于描述进程之间执行的先后顺序. 2.1.2 程序顺序执行 特征: 顺序性 封闭性:指程序在封闭的环境中运行,程序运行时独占全机资源,资源的状态只有本程序才能改变,程序一旦开始执行,其执行结果不受外界因素影响 可再现性:只要条件相同还会得到相同的执行结果. 2.1.3 程序并发执行 特征: 间断性 失去封闭性 不可在现性 2.2进程的描述 2.2.1 进程的定义和特征 定义