目录结构如下:

UserDao.java

 package cn.sxt.dao;

 public interface UserDao {
public void add();
}

UserDaoImpl.java

 package cn.sxt.dao.impl;

 import cn.sxt.dao.UserDao;

 public class UserDaoImpl implements UserDao{
@Override
public void add() {
System.out.println("User add");
}
}

UserDaoOracleImpl.java

 package cn.sxt.dao.impl;

 import cn.sxt.dao.UserDao;

 public class UserDaoOracleImpl implements UserDao{
@Override
public void add() {
System.out.println("User add");
}
}

UserService.java

package cn.sxt.service;

public interface UserService {
public void add();
}

UserServiceImpl.java

 package cn.sxt.service.impl;

 import cn.sxt.dao.UserDao;
import cn.sxt.service.UserService; public class UserServiceImpl implements UserService{
private UserDao userDao;
public void setUserDao(UserDao userDao) {
this.userDao = userDao;
}
@Override
public void add() {
userDao.add();
}
}

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"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd"> <bean id="userDao" class="cn.sxt.dao.impl.UserDaoImpl"></bean>
<bean id="userService" class="cn.sxt.service.impl.UserServiceImpl">
<property name="userDao" ref="userDao"></property>
</bean>
</beans>

SpringTest.java

 package cn.sxt.spring;

 import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext; import cn.sxt.service.UserService; public class SpringTest {
@Test
public void testHello(){
//��������
ApplicationContext ac = new ClassPathXmlApplicationContext("beans.xml");
UserService u1=(UserService)ac.getBean("userService");
u1.add();
}
}

一. scope: 域 ; 在spring中由容器创建对象时可以以指定其scope,那么容器会根据不同的scope的值,创建指定域的对象。

  Singleton : 单例(默认),在容器中只有一个该类型的对象。

  Prototype : 原型, 每次从容器中获取对象时,都重新创建一个对象;action 必须设为 prototype 。

  Request:创建一个对象,该对象存于请求范围。

  Session : 创建一个对象,该对象和session范围一致。

  Application :  创建一个对象,该对象存于 servletContext 中。

二. autowiring : 自动装配

1. no : 默认,不使用自动装配

2. byName : 设置为 byName ,那么在创建该对象时,会根据该对象的 set 方法到容器中查找是否有对应的标识符对象存在,如果存在则注入该对象。

配置文件 :beans.xml

<bean id="userDao" class="cn.sxt.dao.impl.UserDaoImpl"></bean>
<bean id="userService" class="cn.sxt.service.impl.UserServiceImpl" autowire="byName">
</bean>

UserServiceImpl.java 文件

package cn.sxt.service.impl;

import cn.sxt.dao.UserDao;
import cn.sxt.service.UserService; public class UserServiceImpl implements UserService{
private UserDao userDao;
public void setUserDao(UserDao userDao) {
this.userDao = userDao;
}
@Override
public void add() {
userDao.add();
}
}

3. byType : 在创建对象时,会根据该对象的 set 方法的参数类型在容器中查找,如果找到该类型的对象则直接注入,找不到则不注入。

注意:使用 byType 注入,同一个类型在容器中只能有一个配置

4. constructor:本质是 byType注入,只不过是通过对象的构造器去注入,而不是 set 方法。

5. 可以通过头文件,设置全局的自动装配类型:

<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd" default-autowire="byName">

自动装配容器出错,不建议使用

java之spring之scope和autowiring的更多相关文章

  1. java的Spring

    歇了一年都没有写过自己博客了,在学习新东西的时候 ,应该把它们记下来,学了.net 去了公司没有多久就转成了java虽然都在做,还是觉得.net好,不过东西还是应该学习下去,这样才是正解! 首先学习的 ...

  2. [Java] 使用 Spring 2 Portlet MVC 框架构建 Portlet 应用

    转自:http://www.ibm.com/developerworks/cn/java/j-lo-spring2-portal/ Spring 除了支持传统的基于 Servlet 的 Web 开发之 ...

  3. RabbitMQ与java、Spring结合实例详细讲解(转)

    林炳文Evankaka原创作品.转载请注明出处http://blog.csdn.net/evankaka 摘要:本文介绍了rabbitMq,提供了如何在Ubuntu下安装RabbitMQ 服务的方法. ...

  4. spring中间scope详细解释

    0.思维导图 1. scope概论 spring中scope是一个很关键的概念.简单说就是对象在spring容器(IOC容器)中的生命周期,也能够理解为对象在spring容器中的创建方式. 2. sc ...

  5. Java框架spring 学习笔记(二):Bean的作用域

    Spring 框架Bean支持以下五个作用域: 下面介绍两种作用域,singleton和protoype singleton作用域 singleton作用域为默认作用域,在同一个ioc容器内getBe ...

  6. RabbitMQ与java、Spring结合实例详细讲解

    林炳文Evankaka原创作品.转载请注明出处http://blog.csdn.net/evankaka 摘要:本文介绍了rabbitMq,提供了如何在Ubuntu下安装RabbitMQ 服务的方法. ...

  7. 框架-Java:Spring MVC

    ylbtech-框架-Java:Spring MVC Spring MVC属于SpringFrameWork的后续产品,已经融合在Spring Web Flow里面.Spring 框架提供了构建 We ...

  8. 终于搞懂Spring中Scope为Request和Session的Bean了

    之前只是很模糊的知道其意思,在request scope中,每个request创建一个新的bean,在session scope中,同一session中的bean都是一样的 但是不知道怎么用代码去验证 ...

  9. Java之Spring基础与IoC

    Spring About Spring 开源免费框架,轻量级,非入侵式框架.Spring就是一个轻量级的控制反转(IOC)和面向切片编程(AOP)的框架 Maven repo:Spring Web M ...

随机推荐

  1. TypeError: BlobBuilder is not a constructor

    var BlobBuilder = window.BlobBuilder || window.MozBlobBuilder || window.WebKitBlobBuilder || window. ...

  2. 利用sftp迁移pve虚拟机

    首先在A主机进行虚拟机备份vzdump <vmid>在B主机利用sftp复制备份到A主机cd /var/lib/vz/dump/sftp root@192.168.25.140 回答yes ...

  3. 代码审计和动态测试——BUUCTF - 高明的黑客

    根据题目提示,访问http://2ea746a2-0ecd-449b-896b-e0fb38956134.node1.buuoj.cn/www.tar.gz下载源码 解压之后发现有3002个php文件 ...

  4. FFmpeg 被声明为已否决 deprecated(2018 精)

    不用再取消SDL检查,不用再添加#pragma warning(disable :4996),下面才是正确的解决方法!! 以下是一些常见的deprecated问题,遇到下述没有列出的问题,可以打开相应 ...

  5. Mysql:设置主键自动增长起始值

    比较郁闷昨天在家使用‘alter table `tablename` AUTO_INCREMENT=10000;’怎么也不起效,但是今天下班时间公司一同事尝试了一下就可以了.搞不明白自己当时是怎么操作 ...

  6. 009 webpack将ES高级语法进行装换

    一:ES高级转换 1.main.js中的js不能解析 // js的主要入口 import $ from 'jquery' import './css/index.css' import './css/ ...

  7. kotlin基础 range

    a = 1..10 //[1,10] b = 1 unitl 10 //[1,10)

  8. Fiddler抓包_次要功能和第三方插件

    1.替换HTTP Request Host 应用场景:进行开发时,线上去测试跳转调试 替换命令:urlreplace news.baidu.com www.baidu.com: 清除命令:urlrep ...

  9. java中wait()和sleep()的区别;notify()和notifyall()区别

    先说两个概念:锁池和等待池 锁池:假设线程A已经拥有了某个对象(注意:不是类)的锁,而其它的线程想要调用这个对象的某个synchronized方法(或者synchronized块),由于这些线程在进入 ...

  10. golang教材

    https://golangbot.com/buffered-channels-worker-pools/ https://golang.org/doc/ https://medium.com/go- ...