博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
java之spring之scope和autowiring
阅读量:5037 次
发布时间:2019-06-12

本文共 2762 字,大约阅读时间需要 9 分钟。

目录结构如下:

UserDao.java

1 package cn.sxt.dao;2 3 public interface UserDao {4     public void add();5 }
View Code

UserDaoImpl.java

1 package cn.sxt.dao.impl; 2  3 import cn.sxt.dao.UserDao; 4  5 public class UserDaoImpl implements UserDao{ 6     @Override 7     public void add() { 8         System.out.println("User  add"); 9     }10 }
View Code

UserDaoOracleImpl.java

1 package cn.sxt.dao.impl; 2  3 import cn.sxt.dao.UserDao; 4  5 public class UserDaoOracleImpl implements UserDao{ 6     @Override 7     public void add() { 8         System.out.println("User  add"); 9     }10 }
View Code

UserService.java

package cn.sxt.service;public interface UserService {    public void add();}
View Code

UserServiceImpl.java

1 package cn.sxt.service.impl; 2  3 import cn.sxt.dao.UserDao; 4 import cn.sxt.service.UserService; 5  6 public class UserServiceImpl implements UserService{ 7     private UserDao userDao; 8     public void setUserDao(UserDao userDao) { 9         this.userDao = userDao;10     }11     @Override12     public void add() {13         userDao.add();14     }15 }
View Code

beans.xml

1 
2
6 7
8
9
10
11
View Code

SpringTest.java

1 package cn.sxt.spring; 2  3 import org.junit.Test; 4 import org.springframework.context.ApplicationContext; 5 import org.springframework.context.support.ClassPathXmlApplicationContext; 6  7 import cn.sxt.service.UserService; 8  9 public class SpringTest {10     @Test11     public void testHello(){12         //��������13         ApplicationContext ac = new ClassPathXmlApplicationContext("beans.xml");14         UserService u1=(UserService)ac.getBean("userService");15         u1.add();16     }17 }
View Code

 

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

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

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

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

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

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

二. autowiring : 自动装配

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

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

配置文件 :beans.xml

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. 可以通过头文件,设置全局的自动装配类型:

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

 

转载于:https://www.cnblogs.com/Vincent-yuan/p/11248025.html

你可能感兴趣的文章
自定义单选框或者复选框
查看>>
xml知识点
查看>>
隐式类型转换
查看>>
目前国内几大著名报表软件(2014更新)
查看>>
我想要得那块牌—记烟台大学第一届"ACM讲堂"
查看>>
【LaTeX排版】LaTeX论文模版
查看>>
mysql 如何实现跨裤查询
查看>>
redis的string类型操作命令
查看>>
Uva 10305 给任务排序
查看>>
Uva 11396 爪分解
查看>>
Windows2012启动自动帐户登陆
查看>>
python中包的语法
查看>>
那些常考的问答面试题(三)
查看>>
使用Maven管理Spring、Spring MVC、Hibernate的Library
查看>>
iview实战 : 树形组件自定义
查看>>
cookie
查看>>
【Head First Java 读书笔记】(六)认识Java API
查看>>
什么是跨域,什么是同源
查看>>
Python基础之【第一篇】
查看>>
Swift基本语法
查看>>