ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

1.Spring的基本应用

2021-01-27 12:35:48  阅读:179  来源: 互联网

标签:基本 ApplicationContext userDao Spring void say 应用 public


1.1概述

1.1.1 Spring是什么
Spring一个轻量级的框架,以IOC(控制反转)和AOP(面向切面编程)为内核,Spring在表现层提供了Spring MVC的框架整和功能,在业务逻辑层可以管理事务,记录日志,在持久层可以整合Mybatics。虽然Spring可以贯穿表现层,业务逻辑层和持久层,但绝非取代已有的框架,而是高度和开放与他们整合
1.1.2 有什么好处

  • 方便解耦,简化开发:对象的创建都交给Spring,降低组件之间的耦合度。
  • 非侵入式设计:spring中,业务类不需要继承框架的类,将来抛弃spring也比较方便,也就是代码对框架依赖最小化。
  • 支持AOP,允许一些通用的任务,比如安全,事务,日志进行集中处理,提高了程序的复用性。
  • 声明式事务管理
  • 方便测试
  • 方便集成框架

1.1.3 体系结构.
Spring框架采用分层架构,主要分为核心容器,数据集成/访问,web,和其他模块。
在这里插入图片描述
1.1.4 目录结构
通过下载并解压框架包,其中包括doc目录下的api开发文档和开发规范,libs目录下的开发需要的jar包和源码,以及schema文件夹中的约束文件。在libs目录中,有四个基础包分别是,core:包含核心工具类,beans:包含配置文件,管理和创建bean操作的类,context:提供ioc 功能上的扩展服务,expression:表达式语言

1.2核心容器

1.2.1 BeanFactory:管理bean 的工厂,负责初始化bean,调用生命周期方法。

BeanFactory beanfactory = new XmlBeanFactory(new FileSystemResource("F:/applicationContext.xml");

1.2.2 ApplicationContext
是BeanFactory的子接口,添加了国际化,事件传播的支持
实例化方法有两个

//方法一
ApplicationContext applicationContext = new ClassPathXmlApplicationContext(String config)
//这种方法Spring默认到类路径查找
//方法二
ApplicationContext applicationContext = new FileSystemXmlApplicationContext(String config)
//默认用绝对路径

在使用Spring框架时,通常在Java项目中使用ClassPathXmlApplicationContext来实例化,而在web 项目中,实例化工作交给web服务器完成,基于ContextLoaderListener实现。
BeanFactory和ApplicationContext的区别在于,如果bean中有一个属性没有注入,若使用第一种方式,在使用getbean会抛出异常,第二种方法,在初始化时会自检。

1.3入门程序

创建项目,并引入jar包。
在这里插入图片描述
编写测试程序,创建com.itheima.ioc包,创建一个接口,并编写实现类。

//接口
package com.itheima.ioc;
public interface UserDao {
	public void say();

}
//实现类
package com.itheima.ioc;
public class UserDaoImpl implements UserDao{
	public void say(){
		System.out.println("i am saying vacation");
	}
}

创建配置文件,在配置文件中创建bean实例。

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans.xsd">

    <bean id="userDao" class="com.itheima.ioc.UserDaoImpl">
    </bean>
</beans>

创建测试类

package com.itheima.ioc;


import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class TestIoc {

	public static void main(String[] args) {
		ApplicationContext applicationconrtext = new ClassPathXmlApplicationContext("applicationContext.xml");
		UserDao userDao = (UserDao)applicationconrtext.getBean("userDao");
		userDao.say();
		// TODO Auto-generated method stub

	}

}

运行
在这里插入图片描述

1.4依赖注入

依赖注入(DI)和控制反转(Ioc)
传统上当我们在一个类需要调用另一个类对象时,往往通过new 一个新对象的方式,这种方式增加了调用者和被调用者之间的耦合度。
现在使用了Spring框架之后,对象的实例化交由容器来完成,控制权便由调用者的程序代码转移至容器
从容器角度来看,容器负责将被依赖对象赋值给调用者的成员变量,为调用者注入了依赖实例。
通过setter方法,实现依赖注入
再定义一个接口和一个实现类,在实现类中声明上一次定义的类,调用其中的say方法。

package com.itheima.ioc;
public interface UserService {
	public void say();
}
package com.itheima.ioc;

public class UserServiceImpl implements UserService {
	private UserDao userDao;
	
	public UserDao getUserDao() {
		return userDao;
	}

	public void setUserDao(UserDao userDao) {
		this.userDao = userDao;
	}

	public void say(){
		this.userDao.say();
		System.out.println("i am saying second");
		
	}

}

关键在于配置文件的编写

<bean id="userDao" class="com.itheima.ioc.UserDaoImpl"></bean>
    <bean id="userService" class="com.itheima.ioc.UserServiceImpl">
    	<property name="userDao" ref="userDao"></property>
    </bean>

编写测试

public static void main(String[] args) {
		ApplicationContext applicationconrtext = new ClassPathXmlApplicationContext("applicationContext.xml");
		UserService  userService = (UserService)applicationconrtext.getBean("userService");
		userService.say();
		// TODO Auto-generated method stub


	}

运行
在这里插入图片描述

标签:基本,ApplicationContext,userDao,Spring,void,say,应用,public
来源: https://www.cnblogs.com/weilongZhang/p/14334319.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有