博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Spring学习(1)
阅读量:5956 次
发布时间:2019-06-19

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

Spring框架的IOC开发的两种模式,包括XML开发与注解开发的比较

Spring的简介

什么是Spring

Spring是一个开源框架,于2003年兴起的轻量级java开发框架,简单而言,Spring是一个分层的JAVASE/EEfull-stack(一站式)开源框架

Spring入门(IOC)

一、什么是IOC

  • IOC(Inversion of Control):控制反转。
    控制反转:将对象的控制权反转交给Spring
  • 导包 (官网:http://SPring.io/)
  • 引入约束文件

在spring的解压路径下spring-framework-4.2.4.RELEASE\docs\spring-framework-reference\html\xsd-configuration.html

复制代码
  • Spring底层实现原理:
  • Spring学习路线
  • 把类交给Spring处理,有两种方式

1 . 通过XML配置方式

package Spring.demo1;/** * 业务管理层的接口 * @author rong * */public interface UserService { public void add();}复制代码
package Spring.demo1;/** * 业务管理层的实现类 * @author rong * */public class UserServiceImp implements UserService {	private String name;	public void setName(String name) {		this.name = name;	}	@Override	public void add() {		// TODO Auto-generated method stub		System.out.println("UserServiceImp被执行了"+name);	}}复制代码
package Spring.demo1;import org.springframework.context.ApplicationContext;import org.springframework.context.support.ClassPathXmlApplicationContext;import org.springframework.context.support.FileSystemXmlApplicationContext;public class Test {	@org.junit.Test	public void demo1(){//		UserService user=new UserServiceImp();		UserServiceImp user=new UserServiceImp();		user.setName("张三");		user.add();	}	/**	 * Spring 方式的调用	 */	@org.junit.Test	public void demo2(){		/**		 * 创建Spring工厂		 */		ApplicationContext applicationContext=new ClassPathXmlApplicationContext("application.xml");		UserService User = (UserService) applicationContext.getBean("UserService");		User.add();	}	@org.junit.Test	public void demo3(){		/**		 * 加载磁盘上的配置文件		 */		ApplicationContext applicationContext=new FileSystemXmlApplicationContext("D:\\111\\application.xml");		UserService user = (UserService) applicationContext.getBean("UserService");		user.add();	}}复制代码

XML配置文件

其中包括了属性的注入(通过构造函数或Set方法)
SPEL的的注入
集合的注入的注入

1
2
3
张三
李四
王五
张三
李四
王五
复制代码

2 . 通过注解方式

  • 导包
    除了引入基本的开发包,还需要引入AOP包
  • 引入约束文件
    哪里找? spring-framework-4.2.4.RELEASE-docs\spring-framework-reference\html中找xsd-configuration.html中找到Context约束(其中包含了beans约束,beans约束是Spring中最基本的约束)
  • 开启组件扫描(在XML文件中)
复制代码

编写测试类

package demo1;public interface UserDao {	public void sava();}复制代码
package demo1;import org.springframework.beans.factory.annotation.Value;import org.springframework.stereotype.Component;@Component(value="UserDaoImp")//相当于
public class UserDaoImp implements UserDao { @Value("张三") private String name; //可以不提供set方法,则需要将属性的注解添加到属性上;若有set方法,则需要将属性的注入添加到set方法上 /*@Value("张三") public void setName(String name) { this.name = name; }*/ @Override public void sava() { // TODO Auto-generated method stub System.out.println("sava()方法执行了。。"); } @Override public String toString() { return "UserDaoImp [name=" + name + "]"; }}复制代码

说明:属性注入的注解分为以下类型

  1. 普通类型
    @value(“”)设置普通属性的值
  2. 对象类型
    @Autowired:设置对象的属性的值。
    注意:按照类型完成属性注入,而不是名称,与Component(“CLassName”)无关
    一般我们习惯按名称匹配
    下面两个同时写

@Autowired

@Qualifier(value=”ClassName”) //强制使它按照名称的属性注入
@Resource(name=”ClassName”):完成对象属性的注入,等价于上面连续两个(开发中常用)

Bean的其他注解

package demo2;import javax.annotation.PostConstruct;import javax.annotation.PreDestroy;import org.springframework.context.annotation.Scope;import org.springframework.stereotype.Component;@Component(value="custom")//
@Scope("prototype")public class custom { @PostConstruct//初始化注解,相当于nit-method="init" public void init(){ System.out.println("初始化方法执行了"); } public void save(){ System.out.println("save方法执行了"); } @PreDestroy//destory注解,相当于destory-method="destory" public void destory(){ System.out.println("destory方法执行了"); }}复制代码

说明:

  1. 生命周期相关的注解
复制代码

@PostConstruct:初始化方法 @PreDestory:销毁方法 2. Bean的作用范围注解(重要)

@Scope( “ ”) :作用范围

  • Prototype : 多例
  • Request :
  • Session:
  • Globalsession: 测试案例:
package demo2;import org.springframework.context.ApplicationContext;import org.springframework.context.support.ClassPathXmlApplicationContext;public class Test {	@org.junit.Test	public void test1(){		ApplicationContext applicationContext=new ClassPathXmlApplicationContext("applicationContext.xml");		custom c = (custom) applicationContext.getBean("custom");		System.out.println(c);		custom c2 = (custom) applicationContext.getBean("custom");		System.out.println(c2);	}}复制代码

输出结果:

初始化方法执行了demo2.custom@1d9d4b初始化方法执行了demo2.custom@1227d8d复制代码

说明:由于使用了@Scope("prototype"),多例模式初始化了两次,得到两个不同的id;

3 . 两种方式的比较

  • 适用场景
    • XML:可以使用任何场景
      • 结构清晰,维护方便
    • 注解:必须修改源代码(如果你无法修改源代码,只能用XML)
      • 开发方便,速度快

4 . XML与注解的整合开发

思路:用XML用来管理类的注入,用注解完成属性的注入。 测试案例:

package Demo3;import org.springframework.stereotype.Component;//@Component("order")public class order {	public void play()	{		System.out.println("生产产品");	}}复制代码
package Demo3;import javax.annotation.Resource;import org.springframework.stereotype.Component;//@Component("orderService")//相当于
public class orderService { @Resource(name="order")//这个name就是配置文件(applicationContext.xml)里面的或者 //如果是用的类上注解等同于@Component(value=”id/name”)中的id private order od; public orderService() { System.out.println("无参构造方法被调用..."); // TODO Auto-generated constructor stub } public void t(){ od.play(); }}复制代码
package Demo3;import javax.annotation.Resource;import org.junit.runner.RunWith;import org.springframework.test.context.ContextConfiguration;import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;@RunWith(SpringJUnit4ClassRunner.class)@ContextConfiguration("classpath:applicationContext.xml")public class Test {	@Resource(name="orderService")	private orderService se;	@org.junit.Test	public void test1(){		se.t();	}}复制代码

配置文件

复制代码

转载地址:http://vbgxx.baihongyu.com/

你可能感兴趣的文章
Dev-FAT-UAT-PRO
查看>>
Android开发学习总结(五)——Android应用目录结构分析(转)
查看>>
[PHP]PHP rpc框架hprose测试
查看>>
Atom 编辑器系列视频课程
查看>>
C#三种定时器
查看>>
范数 L1 L2
查看>>
协同过滤及大数据处理
查看>>
Java8 本地DateTime API
查看>>
jQuery 增加 删除 修改select option
查看>>
[原][osgearth]osgearthviewer读取earth文件,代码解析(earth文件读取的一帧)
查看>>
springboot 常用插件
查看>>
一个基于特征向量的近似网页去重算法——term用SVM人工提取训练,基于term的特征向量,倒排索引查询相似文档,同时利用cos计算相似度...
查看>>
[转]Newtonsoft.Json高级用法
查看>>
Spring+SpringMVC+MyBatis+easyUI整合基础篇(一)项目简述及技术选型介绍
查看>>
DFI、DPI技术
查看>>
hibernate 执行存储过程 方法
查看>>
RapidIOIP核的验证方法研究_王玉欢
查看>>
崩溃日志的实例
查看>>
base64是啥原理
查看>>
实战 Windows Server 2012 群集共享卷
查看>>