xml
一 目的:通过ApplicationContext对象的getBean方法获取所需类的对象.
编写一个service类
public class service {
private String name;public void add(){
System.out.println("add ....");
}
}
编写applicationContext.xml文件
<bean id="service" class="spring_xml_aop_start.service" />
编写测试类
public class test {
public static void main(String[] args) {
ApplicationContext context=new ClassPathXmlApplicationContext("applicationContext.xml");//入门用,后期监听器加载
service us=(service) context.getBean("service");
us.add();
}
}
测试类运行结果
二 目的基于目的一进行简单属性注入
属性注入有两种形式:构造器注入和set方法注入
构造器注入:applicationContext.xml中的对应<bean>标签下<constructor-arg name="类中成员变量名" value="属性赋值"></constructor-arg>
类需要提供有参构造
简单值注入
在xml中的相应bean中配置constructor-arg时 类中有参构造中参数有几个就要配几个
可以直接value=""值 这个排序是根据类的初始化排序(有参下面this.xx=xx的顺序)
也可以通过index="0/1/2"或者type="类型" 进行手动排序
也可以 name="类成员名" value=""进行配置
引用另一个类的复杂注入
在类中 private dao dao;并在有参构造 this.dao=dao;
set注入:<property name="类成员名" value="属性赋值"></property>
只需在类中给成员变量提供set方法即可
service类
public class service {
private String name;
private dao dao;
public service(String name,dao dao) {
super();
this.name = name;
this.dao = dao;
}
public void add(){
dao.daotest();
System.out.println("add ...."+name);
}
}
dao类
public class dao {
private String name;
public void setDao(String dao) {
this.name = dao;
}
public void daotest(){
System.out.println("复杂注入"+name);
}
}
配置文件
<bean id="dao" class="spring_xml_aop_start.dao">
<property name="dao" value="我是dao"></property>
</bean>
<bean id="service" class="spring_xml_aop_start.service">
<constructor-arg name="name" value="我是service"></constructor-arg>
<constructor-arg name="dao" ref="dao"></constructor-arg>
</bean>
测试类同上
运行结果
注解
首先是在applicationContext.xml中配置
<context:component-scan base-package="基包" /> //扫描的基包
在然后把类交个spring管理有他们4个都可以("名称") 相当于xml中的<bean id=""或者name="">
@Component:组件 ---所有类都能用 @Controller :修饰web层类 @Service :修饰业务层类 @Repository :修饰持久层类
属性注入 :
普通注入:@Value("值")
对象类型属性: @Resource(name="上面类注解的名字")可以不用谢
@Autowired 按类型注解结合@Qualifier按名称注入
测试类:在类名前加上下面两段注解
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations="classpath:applicationContext.xml")
声明需要测试的类
@Resource
private Service service;
测试方法加@Test注解ctrl+1导包
!!注解注意事项:
使用注解初始化类的时候,类中千万不要有有参构造,不然会被报出累没有初始化的异常!
因为spring 在初始化bean的时候要先调用构造函数,再set其它属性.
service类
@Service("service")
public class service {
@Value("service")
private String name;
@Resource(name="daoss")
private dao dao;
//这里之前xml配置时调用构造器进行注入属性的,注解操作时要去掉
/*public service(String name, spring_anno_start.dao dao) {
super();
this.name = name;
this.dao = dao;
}*/
public void add(){
dao.daotest();
System.out.println("add ...."+name);
}
}
dao类
@Repository("daoss")
public class dao {
@Value("dao")
private String name;
public void daotest(){
System.out.println("复杂注入"+name);
}
}
测试类
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations="classpath:applicationContext.xml")
public class test {
@Resource
private service service; @Test
public void test1(){
service.add();
}
}
applicationContext.xml
<context:component-scan base-package="spring_anno_start"></context:component-scan>
运行结果
关于spring的IOC和DI的xml以及注解的简单介绍的更多相关文章
-
spring的IOC,DI及案例详解
一:spring的基本特征 Spring是一个非常活跃的开源框架:它是一个基于Core来架构多层JavaEE系统的框架,它的主要目的是简化企业开发.Spring以一种非侵入式的方式来管理你的代码,Sp ...
-
Spring的Ioc与DI
一.前言 Spring框架的核心基于控制反转的原理. IoC是一种将组件依赖关系的创建和管理外部化的技术. 考虑一个示例,其中Foo类依赖于Bar类的实例来执行某种处理. 传统上,Foo使用new运算 ...
-
对Spring中IOC和DI的理解
前几篇讲了Spring中IOC和DI的用法,本篇应该放到三篇之前,但一直没有想到好的讲解方式,后参考https://blog.csdn.net/luoyepiaoxue2014/article/det ...
-
04 Spring:01.Spring框架简介&;&;02.程序间耦合&;&;03.Spring的 IOC 和 DI&;&;08.面向切面编程 AOP&;&;10.Spring中事务控制
spring共四天 第一天:spring框架的概述以及spring中基于XML的IOC配置 第二天:spring中基于注解的IOC和ioc的案例 第三天:spring中的aop和基于XML以及注解的A ...
-
关于Spring的IOC和DI
原始调用模型 Spring的演化过程 Spring的调用过程 ======================================= IoC[理解][应用][重点] 1.IoC(Inversi ...
-
转载百度百科上的强回复,关于spring的IOC和DI
IoC与DI 首先想说说IoC(Inversion of Control,控制倒转).这是spring的核心,贯穿始终.所谓IoC,对于spring框架来说,就是由spring来负责控制对象的生命 ...
-
Java 反射和内省实现spring的IOC和DI
1.构造两个JavaBean package com.spring.model; public class People { private Car car; public Car getCar() ...
-
总结一下 Spring的IOC、DI
国庆节刚过,应一些朋友的提问,总结一下Spring中IOC也即DI的通俗理解. 网友wm5920解释: IOC控制反转:说的是创建对象实例的控制权从代码控制剥离到IOC容器控制,实际就是你在xml文件 ...
-
Spring:Ioc和DI
一.摘要 本文为作者搜集的Spring关于IoC/DI相关知识的记录整理笔记.介绍了IoC(控制反转)是一种设计原则,用于降低代码的耦合度.介绍了IoC是通过BeanDefinitio ...
随机推荐
-
IE8中JSON.stringify方法对自动转换unicode字符的解决方案
IE8内置了JSON对象,用以处理JSON数据.与标准方法的不同,IE8的JSON.stringify会把utf-8字符转码: var str = "我是程序员" var json ...
-
ORACLE Recyclebin管理及flashback recyclebin中的对象
Flashback用于恢复用户误删除的对象(包括表,索引等), 不支持sys用户. system表空间下的对象,也不能从回收站里拿到.故使用SYS 或者SYSTEM用户登陆时, show recycl ...
-
HDU 3231 Box Relations
题目大意: 给定一些正方体的关系,要求一组符合这些关系的正方体坐标,如果不存在符合条件的正方体坐标,IMPOSSIBLE.(Special Judge) 实力还是太弱了,完全不会…… #include ...
-
word页眉页脚 首页 索引 正文各不同的处理方法
1.在目录和正文之间,加入分隔符——分节符——下一页,然后再添加页眉页脚,然后再添加索引:
-
dBm与Vpp相互转换公式
dBm = 10 + 20lg(0.5Vpp) Vpp = 2x10 以上公式均为阻抗为50欧的情况下计算得出的
-
使用requireJS
什么是require? require是AMD模块化规范的具体实现. 目前,通行的js模块化规范有两种,CommonJS和AMD. CommonJS和AMD有什么不同呢? CommonJS主要用于服务 ...
-
JavaC命令不能被执行尴尬问题解决
安装和配置环境变量都按着流程在,但在最后的检验时,发现Java Java -version 都能运行,唯独Javac 报"不能识别命令"错误信息,下面列出我遇到一个尴尬问题 在 ...
-
ES5-ES6-ES7_class类
传统创建对象模板的方式 JavaScript 语言中,生成实例对象的传统方法是通过构造函数 //JavaScript 语言中,生成实例对象的传统方法是通过构造函数 function Point(x, ...
-
洛谷P3317 [SDOI2014]重建 [Matrix-Tree定理]
传送门 思路 相信很多人像我一样想直接搞Matrix-Tree定理,而且还过了样例,然后交上去一分没有. 但不管怎样这还是对我们的思路有一定启发的. 用Matrix-Tree定理搞,求出的答案是 \[ ...
-
jquery简介未完成
jQuery jQuery是一个快速.简洁的javascript框架,是继prototype之后又一个优秀的代码库(或者javascript框架).jQuery设计的宗旨是writeLess,Do M ...