一、Spring框架

Spring是一个基于IOC和AOP的结构J2EE系统的框架。

1、IOC反转控制是Spring的基础(Inversion Of Control)。也就是说创建对象由以前的程序员自己new构造方法来调用,变成了交给Spring创建对象。

2、DI依赖注入(Dependency Inject):就是拿到的对象的属性,已经被注入好相关值了,可以直接使用。

3、将lib.jar导入到新建的Spring项目的lib目录(类库)中。

导入jar包方法:右键project->properties->java build path->libaries->add external jars就行。

4、在src目录下,建立两个文件夹,一个pojo(放实体类),一个test(测试用)

准备pojo Product,用来测试IOC和DI

package com.demo.pojo;
public class Product{
private int id;
private String name;
//属性的getter和setter方法
public int getId(){
return id;
}
public void setId(int id){
this.id=id;
}
public String getName(){
return name;
}
public void setName(String name){
this.name=name;
}
}

5、在src目录下新建一个applicationContext.xml文件

  applicationContext.xml是Spring的核心配置文件,通过配置bean的属性,根据关键字product来获取Product对象,该对象获取的时候,被注入了字符串"Apple"到属性中。

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:tx="http://www.springframework.org/schema/tx"
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/aop
http://www.springframework.org/schema/aop/spring-aop-3.0.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx-3.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.0.xsd">
<bean name="product" class="com.demo.pojo.Product">
<property name="name" value="Apple"/>
</bean>
</beans>

6、测试TestSpring

在test文件夹下,建立TestSpring

package com.demo.test;

import org.springframework.context.ApplicationContext;
import org.springframework.support.ClassPathXmlApplicationContext; import com.demo.pojo.Product; public class TestSpring{
public static void main(String[] args){
//加载applicationContext.xml配置文件
ApplicationContext context=new ClassPathXmlApplicationContext(new String[]{"applicationContext.xml"});
//根据ApplicationContext对象提供的getBean()方法,获取配置bean的name属性值。
Product product=(Product)context.getBean("product");
System.out.println(product.getName());
}
}

7、工作原理:

IOC方式获取对象方式:对象的生命周期交给Spring来管理,直接从Spring那里获取一个对象。

传统方式:通过new关键字主动创建一个对象。

二、注入对象

之前直接对Product的name属性注入"Apple"字符串,这一次我们注入一个Category分类对象。

1、首先修改Product.java实体类,新增一个Category属性。

package com.demo.pojo;
public class Product{
private int id;
private String name;
private Category category;//类别属性
//属性的getter和setter方法
public int getId(){
return id;
}
public void setId(int id){
this.id=id;
}
public String getName(){
return name;
}
public void setName(String name){
this.name=name;
}
public Category getCategory(){
return category;
}
pulic vodi setCategory(Category category){
this.category=category;
}
}

2、修改applicationContext.xml配置文件

在创建Product的时候注入一个Category对象,这里要使用ref来注入另一个对象。

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:tx="http://www.springframework.org/schema/tx"
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/aop
http://www.springframework.org/schema/aop/spring-aop-3.0.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx-3.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.0.xsd">
<bean name="product" class="com.demo.pojo.Product">
<property name="name" value="Apple"/>
<property name="category" ref="Category"/><!--将category对象注入到product-->
</bean>
<!--配置Category的bean-->
<bean name="category" class="com.demo.pojo.Category">
<property name="name" value="Fruit"/>
</bean>
</beans>

3、TestSpring测试

通过Spring获取Product对象被注入的Category对象

package com.demo.test;

import org.springframework.context.ApplicationContext;
import org.springframework.support.ClassPathXmlApplicationContext; import com.demo.pojo.Product; public class TestSpring{
public static void main(String[] args){
//加载applicationContext.xml配置文件
ApplicationContext context=new ClassPathXmlApplicationContext(new String[]{"applicationContext.xml"});
//根据ApplicationContext对象提供的getBean()方法,获取配置bean的name属性值。
Product product=(Product)context.getBean("product");
System.out.println(product.getName());//Apple
System.out.pringln(product.getCategory().getName());//Fruit
}
}

三、采用注解的方式进行IOC/DI

1、修改applicationContext.xml

添加配置:

<context:annotation-config/>

具体配置修改如下:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:tx="http://www.springframework.org/schema/tx"
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/aop
http://www.springframework.org/schema/aop/spring-aop-3.0.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx-3.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.0.xsd">
<context:annotation-config/
<bean name="product" class="com.demo.pojo.Product">
<property name="name" value="Apple"/>
<!--<property name="category" ref="Category"/><!--将category对象注入到product--><!--注释掉刚才给Product注入的category属性,后面采用注解完成该操作-->
</bean>
<!--配置Category的bean-->
<bean name="Category" class="com.demo.pojo.Category">
<property name="name" value="Fruit"/>
</bean>

2、采用注解@Autowired

2.1、在Product.java的Category属性上面加上@Autowired注解

package com.demo.pojo;
public class Product{
private int id;
private String name;
@Autowried//采用注解注入Category属性,不用在xml配置bean的Product引入Category
private Category category;//类别属性
//属性的getter和setter方法
public int getId(){
return id;
}
public void setId(int id){
this.id=id;
}
public String getName(){
return name;
}
public void setName(String name){
this.name=name;
}
public Category getCategory(){
return category;
}
pulic vodi setCategory(Category category){
this.category=category;
}
}

2.2、也可以在setCategory方法上面加上@Autowired注解,达到同样效果

package com.demo.pojo;
public class Product{
private int id;
private String name;
//@Autowried//采用注解注入Category属性,不用在xml配置bean的Product引入Category
private Category category;//类别属性
//属性的getter和setter方法
public int getId(){
return id;
}
public void setId(int id){
this.id=id;
}
public String getName(){
return name;
}
public void setName(String name){
this.name=name;
}
public Category getCategory(){
return category;
}
@Autowried
pulic void setCategory(Category category){
this.category=category;
}
}

2.3、还可以采用@Resource注解

package com.demo.pojo;
import javax.annotation.Resource;
public class Product{
private int id;
private String name;
//@Autowried//采用注解注入Category属性,不用在xml配置bean的Product引入Category
@Resource(name="category")
private Category category;//类别属性
//属性的getter和setter方法
public int getId(){
return id;
}
public void setId(int id){
this.id=id;
}
public String getName(){
return name;
}
public void setName(String name){
this.name=name;
}
public Category getCategory(){
return category;
}
//@Autowried
pulic void setCategory(Category category){
this.category=category;
}
}

3、TestSpring测试

package com.demo.test;

import org.springframework.context.ApplicationContext;
import org.springframework.support.ClassPathXmlApplicationContext; import com.demo.pojo.Product; public class TestSpring{
public static void main(String[] args){
//加载applicationContext.xml配置文件
ApplicationContext context=new ClassPathXmlApplicationContext(new String[]{"applicationContext.xml"});
//根据ApplicationContext对象提供的getBean()方法,获取配置bean的name属性值。
Product product=(Product)context.getBean("product");
System.out.println(product.getName());//Apple
System.out.pringln(product.getCategory().getName());//Fruit
}
}

4、也可以不用再applicationContext.xml中一个一个配置bean。

配置bean属性的都去掉,直接加上:

<context:component-scan base-package="com.demo.pojo"/>

作用:告诉Spring,bean都放在com.demo.pojo包下

applicationContext.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"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:tx="http://www.springframework.org/schema/tx"
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/aop
http://www.springframework.org/schema/aop/spring-aop-3.0.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx-3.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.0.xsd"> <context:component-scan base-package="com.demo.pojo"/> </beans>

4.1、使用@Component注解,为pojo加上注解,说明这个类是bean

Product.java:

package com.demo.pojo;
import javax.annotation.Resource; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component; @Component("product")
public class Product{
private int id;
private String name="Apple";
//@Autowried//采用注解注入Category属性,不用在xml配置bean的Product引入Category
@Resource(name="category")
private Category category;//类别属性
//属性的getter和setter方法
public int getId(){
return id;
}
public void setId(int id){
this.id=id;
}
public String getName(){
return name;
}
public void setName(String name){
this.name=name;
}
public Category getCategory(){
return category;
}
//@Autowried
pulic void setCategory(Category category){
this.category=category;
}
}

Category.java

package com.demo.pojo;

import org.springframework.stereotype.Component;

@Component("category")
public class Category { private int id;
private String name="Fruit"; public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}

4.2、TestSpring测试

package com.demo.test;

import org.springframework.context.ApplicationContext;
import org.springframework.support.ClassPathXmlApplicationContext; import com.demo.pojo.Product; public class TestSpring{
public static void main(String[] args){
//加载applicationContext.xml配置文件
ApplicationContext context=new ClassPathXmlApplicationContext(new String[]{"applicationContext.xml"});
//根据ApplicationContext对象提供的getBean()方法,获取配置bean的name属性值。
Product product=(Product)context.getBean("product");
System.out.println(product.getName());//Apple
System.out.pringln(product.getCategory().getName());//Fruit
}
}

十七、Spring框架(IOC/DI)的更多相关文章

  1. Spring框架——IOC&DI

    Spring Spring 目标 内容 Spring与web整合的原理 Spring 中包含的关键特性 Spring架构图 企业级框架 企业级系统 IOCDI IOC DI IOC和DI 为什么使用依 ...

  2. Spring框架-IOC/DI详细学习

    一.IOC/DI概念 参考博客:https://www.cnblogs.com/xdp-gacl/p/4249939.html IOC(inversion of control, 控制反转)是一种设计 ...

  3. Spring框架IOC容器和AOP解析 非常 有用

    Spring框架IOC容器和AOP解析   主要分析点: 一.Spring开源框架的简介  二.Spring下IOC容器和DI(依赖注入Dependency injection) 三.Spring下面 ...

  4. 自己动手写Spring框架--IOC、MVC

    对于一名Java开发人员,我相信没有人不知道 Spring 框架,而且也能够轻松就说出 Spring 的特性-- IOC.MVC.AOP.ORM(batis). 下面我想简单介绍一下我写的轻量级的 S ...

  5. Spring框架IOC,DI概念理解

    1.什么是框架? 框架是一种重复使用的解决方案,针对某个软件开发的问题提出的. Spring框架,它是一个大型的包含很多重复使用的某个领域的解决方案. Spring的理念:不要重复发明轮子. 2.Sp ...

  6. Spring-初识Spring框架-IOC控制反转(DI依赖注入)

    ---恢复内容开始--- IOC :控制反转 (DI:依赖注入)使用ioc模式开发 实体类必须有无参构造方法1.搭建Spring环境下载jarhttp://maven.springframework. ...

  7. Spring框架IOC容器和AOP解析

    主要分析点: 一.Spring开源框架的简介  二.Spring下IOC容器和DI(依赖注入Dependency injection) 三.Spring下面向切面编程(AOP)和事务管理配置  一.S ...

  8. spring框架--IOC容器,依赖注入

    思考: 1. 对象创建创建能否写死? 2. 对象创建细节 对象数量 action  多个   [维护成员变量] service 一个   [不需要维护公共变量] dao     一个   [不需要维护 ...

  9. Spring的IOC/DI使用到的技术

    一.了解Spring IOC/DI 1:Spring有两大核心技术,控制反转(Inversion of Control, IOC)/依赖注入(Dependency Injection,DI)和面向切面 ...

  10. Spring框架ioc概括

    什么是Spring且能做什么 Spring是一个开源框架,它由Rod Johnson创建.它是为了解决企业应用开发的复杂性而创建的. Spring使用基本的JavaBean来完成以前只可能由EJB完成 ...

随机推荐

  1. nodejs的dependency.md

    dependency和devDependency的区别 package-a --- package-b (dependency) --- | --- package-c (devDependency) ...

  2. dataTables使用整理(一)

    初次使用dataTables,对一些用到的属性及遇到的问题做一个简要的记录 参考资料: http://blog.csdn.net/mickey_miki/article/details/8240477 ...

  3. hdu 5676 ztr loves lucky numbers 打表+二分

    ztr loves lucky numbers Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/ ...

  4. 《深入理解JVM虚拟机》读书笔记

    前言:<深入理解JVM虚拟机>是JAVA的经典著作之一,因为内容更偏向底层,所以之前一直没有好好的阅读过.最近因为刚好有空,又有了新目标.所以打算和<构架师的12项修炼>一起看 ...

  5. 大整数加法 HDU1002

    今天早上没事干又把这个敲了一遍,虽然手冻得不行,不过又深入理解理解还可以哈. 难点就在给你的整数可能很大很长,所以long long 肯定不行,得用字符串来读取存储,然后注意一下相加的时候进位,最后输 ...

  6. TRMM数据在arcgis打开

    基本思路:地图配准 1将投影设置为plate carree(world) ,是在投影坐标系统下的世界中选择,当然为了输入坐标方便,设置属性genral中单位为度,显示为度分秒. 2 首先,要知道打开后 ...

  7. Swift与JS的交互

    Swift与JS的交互 原理 同Object-C与JS交互的大同小异,只是方法形式改变了. 首先我们需要引入iOS7.0出来的JavaScriptCore.framework JavaScriptCo ...

  8. unbuntu安装Node.js

    在官网https://nodejs.org/en/下载 手动创建链接的话,新安装的angular的ng   typescript的tsc都要自己手动建立软链接,要不就每个工程里npm install一 ...

  9. POI导出时写一份到ftp服务器,一份下载给客户端

    导语: 昨天接到项目经理这么一个需求,让我在POI导出Excel的时候写一份到我之前搭建的ftp服务器上.所以就有了这篇博客首先我们来分析下之前的业务逻辑:我们创建并构造了一个workbook,然后构 ...

  10. Navicat for MySQL 查看BLOB字段内容

    转载地址:https://blog.csdn.net/lwei_998/article/details/41871329