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以及注解的简单介绍的更多相关文章

  1. spring的IOC,DI及案例详解

    一:spring的基本特征 Spring是一个非常活跃的开源框架:它是一个基于Core来架构多层JavaEE系统的框架,它的主要目的是简化企业开发.Spring以一种非侵入式的方式来管理你的代码,Sp ...

  2. Spring的Ioc与DI

    一.前言 Spring框架的核心基于控制反转的原理. IoC是一种将组件依赖关系的创建和管理外部化的技术. 考虑一个示例,其中Foo类依赖于Bar类的实例来执行某种处理. 传统上,Foo使用new运算 ...

  3. 对Spring中IOC和DI的理解

    前几篇讲了Spring中IOC和DI的用法,本篇应该放到三篇之前,但一直没有想到好的讲解方式,后参考https://blog.csdn.net/luoyepiaoxue2014/article/det ...

  4. 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 ...

  5. 关于Spring的IOC和DI

    原始调用模型 Spring的演化过程 Spring的调用过程 ======================================= IoC[理解][应用][重点] 1.IoC(Inversi ...

  6. 转载百度百科上的强回复,关于spring的IOC和DI

    IoC与DI   首先想说说IoC(Inversion of Control,控制倒转).这是spring的核心,贯穿始终.所谓IoC,对于spring框架来说,就是由spring来负责控制对象的生命 ...

  7. Java 反射和内省实现spring的IOC和DI

    1.构造两个JavaBean package com.spring.model; public class People { private Car car; public Car getCar() ...

  8. 总结一下 Spring的IOC、DI

    国庆节刚过,应一些朋友的提问,总结一下Spring中IOC也即DI的通俗理解. 网友wm5920解释: IOC控制反转:说的是创建对象实例的控制权从代码控制剥离到IOC容器控制,实际就是你在xml文件 ...

  9. Spring:Ioc和DI

    一.摘要         本文为作者搜集的Spring关于IoC/DI相关知识的记录整理笔记.介绍了IoC(控制反转)是一种设计原则,用于降低代码的耦合度.介绍了IoC是通过BeanDefinitio ...

随机推荐

  1. Tcl与Design Compiler (五)——综合库(时序库)和DC的设计对象

    本文如果有错,欢迎留言更正:此外,转载请标明出处 http://www.cnblogs.com/IClearner/  ,作者:IC_learner 前面一直说到综合库/工艺库这些东西,现在就来讲讲讲 ...

  2. HTML初识

    HTML初识 web服务本质 import socket def main(): sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) so ...

  3. Python操作SQLAchemy

    如果对代码不懂就看这个:http://www.cnblogs.com/jixuege-1/p/6272888.html 本篇对于Python操作MySQL主要使用两种方式: 原生模块 pymsql O ...

  4. Struts(九):值栈(OGNL)

    引言 在我们开发过程中,往往会使用一个对像传递到一个具体的action中,之后到跳转页面中访问对应对象的具体的参数. 比如:我们搭建一个struts2项目: 回顾下如何搭建strut2: 1.下载的s ...

  5. Eureka服务注册中心

    Eureka服务注册中心 最近在研究Spring Cloud,发现其中的组件实在是太多了,真的是头大,只能一块一块看,像盲人摸象一样.要想很短时间内掌握Spring Cloud是不可能的,小编就学习一 ...

  6. C# webBrowser 控件赋值

    string body = PostWebRequest(txtURL.Text, textBox2.Text); if (webBrowser1.ReadyState != WebBrowserRe ...

  7. 【图解数据结构】 栈&队列

    [TOC] 勤于总结,持续输出! 1.栈 1.1栈的定义 栈(stack)是限定在表尾进行插入和删除的操作的线性表. 我们把允许插入和删除的一端称为栈顶(top),另一端称为栈底(bottom),不包 ...

  8. dev gridControl 自定义绘制列头颜色

    1.添加事件CustomDrawColumnHeader private void gvw1_CustomDrawColumnHeader(object sender, DevExpress.Xtra ...

  9. 学习HTML的第三次课

    浏览器的地址栏中有字数限制,大约为200个字符. 1.表单:<form action="" method=""></form> 属性: ...

  10. centOS7配置DNS服务器

    世上无难事只怕有心人,遇事千万千万不要抵触,消极的情绪是失败之母,一点一滴,踏踏实实是通往幸福的捷径. 历经激动,受挫,抵触和鼓励以及征服,终于配好了让我欢喜让我忧的dns.在这里记录下来,希望能够给 ...