0
点赞
收藏
分享

微信扫一扫

JavaEE(SSM)-6:Spring入门

驚鴻飛雪 2022-03-22 阅读 54

1 Spring概述

1.1 什么是Spring

一个Java 应用程序开发框架,为Java EE三层(架构)开发模式的各层都提供解决方案。

Spring对三层的支持:

1.2 核心功能

1.3 优点(主要是指其核心功能特征)

1.4 Spring的体系结构(主要是基础功能和在web中的应用)

2 控制反转Ioc与依赖注入DI

Spring的核心内容之一。

2.1 控制反转Ioc

实际是创建对象的控制权发生转移(由原来的应用对象内部创建,转移到应用对象的外部来创建)。

传统创建对象的方式是使用new ;而如果使用Spring框架,那么你的业务对象将由框架创建并维护,当需要使用业务对象时,使用Spring的核心接口,从Spring容器中取出来使用。

2.1.1 示例:输出Hello Spring

【目的】

  • (1)基于Spring框架的项目创建过程;
  • (2)理解控制反转及其应用;
  • (3)对比传统方式与spring框架思想

【描述】

  • 基于spring框架的maven项目,创建一个包含输出方法的类,在控制台输出Hello Spring。

【步骤】

  • (1)创建Maven项目,添加Spring框架核心依赖.

  • (2)创建demo包下的实现类:Ioc.java,添加一个输出方法:print().

  • (3)添加Spring配置文件,注册Ioc。

  • (4)创建测试类,执行

(1)创建项目,添加依赖(5个)

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>com.my</groupId>
  <artifactId>chap6</artifactId>
  <packaging>war</packaging>
  <version>0.0.1-SNAPSHOT</version>
  <name>chap6 Maven Webapp</name>
  <url>http://maven.apache.org</url>
  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>3.8.1</version>
      <scope>test</scope>
    </dependency>
    
    <!-- Spring核心包1:spring-beans -->
    <dependency>
    	<groupId>org.springframework</groupId>
    	<artifactId>spring-beans</artifactId>
    	<version>5.3.14</version>
    </dependency>
      
       <!-- Spring核心包2:spring-core -->
    <dependency>
    	<groupId>org.springframework</groupId>
    	<artifactId>spring-core</artifactId>
    	<version>5.3.14</version>
    </dependency>      
      
        <!-- Spring核心包3:spring-expression -->
    <dependency>
    	<groupId>org.springframework</groupId>
    	<artifactId>spring-expression</artifactId>
    	<version>5.3.14</version>
    </dependency>
      
    <!-- *************************************************************-->      
     <!--1. Spring核心包4:spring-context   ****实际上 仅仅需要这一个就可以了***-->
    <dependency>
    	<groupId>org.springframework</groupId>
    	<artifactId>spring-context</artifactId>
    	<version>5.3.14</version>
    </dependency>
   
     <!-- *************************************************************-->    
     <!--2. Spring依赖包,用于日志输出:commons-logging -->
 	<dependency>
 		<groupId>commons-logging</groupId>
 		<artifactId>commons-logging</artifactId>
 		<version>1.2</version>
 	</dependency>
  </dependencies>

  <build>
    <finalName>chap6</finalName>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-war-plugin</artifactId>
            <version>3.3.2</version>
        </plugin>
	</plugins>
  </build>
</project>

(2)添加类

【文件位置】src/main/java/demo/Ioc.java

package demo;

public class Ioc {
	public void print() {
		System.out.println("Hello Spring!");
	}
}

(3)添加配置文件

【文件位置】src/main/resources/spring.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"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd">

	<!-- 注册 -->
	<bean id="print" class="demo.Ioc" />
    
</beans>

(4)测试

【文件位置】src/test/java/MyTest.java

package chap6;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class MyTest {
    //传统使用方式
    //	@Test
	//	public void test0() {
	//		Ioc ioc=new Ioc();
	//		ioc.print();
	//	}
    
    
	@Test
	public void test1() {
        //应用接口,容器的核心操作对象
		ApplicationContext ctx=new ClassPathXmlApplicationContext("spring.xml");
		
        //获取对象;从容器中获取对象
        Ioc ioc=ctx.getBean(Ioc.class);
        
		ioc.print();//使用
		
    }

【运行结果】

  • 在控台上输出如下内容
Hello Spring!

2.2 依赖注入DI

使用Spring创建对象,并注入对象所需要的属性(初始化)。

2.2.1 属性注入(常用)

设计类时,提供setter方法,在Spring配置文件中,通过配置属性property为对象赋值。此类具有无参构造方法。

【语法】

	<bean id="对象名" class="实现类全限定名:包名.类名">
		<property name="属性名1" value="值1"/>
		<property name="属性名2" value="值2"/> 
	</bean> 

2.2.2 示例:设置链接数据库的初始属性,并输出

【目的】

  • 理解依赖注入

【描述】

  • 创建DI1类,设置访问mybatis数据库的连接信息:数据库名、用户名和密码,并在控制台上输出。

【步骤】

  • (1)创建类
package demo;

public class DI1 {
	String dbName,userName,pwd;
	
	//只写属性:赋值
	public void setDbName(String dbName) {
		this.dbName = dbName;
	}

	public void setUserName(String userName) {
		this.userName = userName;
	}

	public void setPwd(String pwd) {
		this.pwd = pwd;
	}
	
	//
	@Override
	public String toString() {
		System.out.println(dbName+","+userName+","+pwd);
		return dbName+","+userName+","+pwd;
	}
	
}

  • (2)配置文件
<?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
	https://www.springframework.org/schema/beans/spring-beans.xsd">

	  
	<bean id="di1" class="demo.DI1">
		<property name="dbName" value="mybatis"/>
		<property name="userName" value="root"/>
		<property name="pwd" value="root"/>
	</bean> 
</beans>
  • (3)测试
 	@Test
	public void test() {
		ApplicationContext ctx=new ClassPathXmlApplicationContext("spring.xml");
		DI1 di1= ctx.getBean(DI1.class);
		di1.toString(); 
	}

2.3 构造器注入

在Spring创建对象的同时,通过配置属性constuctor-arg,传递构造参数。此类有有参数的构造方法。

【语法】

	<bean id="id" class="包名.类名">
		<constructor-arg   value="参数1值"/>
		<constructor-arg   value="参数2值"/>
	</bean> 

【或者】

	<bean id="id" class="包名.类名">
		<constructor-arg index="参数位置,如0"  value="参数1值"/>
		<constructor-arg index="参数位置,如1"  value="参数2值"/>
	</bean> 

2.3.1 示例:改写上面示例,使用构造方法实现注入。

【步骤】

  • (1)使用构造方法注入的类:DI2.java
package demo;

public class DI2 {
	String dbName,userName,pwd;
	
	public DI2(String a1,String a2,String a3) {
		this.dbName=a1;
		this.userName=a2;
		this.pwd=a3;
	}
	
	@Override
	public String toString() { 
		System.out.println(dbName+","+userName+","+pwd);
		return "";
	}
}
  • (2)配置文件spring.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"
	xsi:schemaLocation="http://www.springframework.org/schema/beans
	https://www.springframework.org/schema/beans/spring-beans.xsd"> 
	
	<bean id="di2" class="demo.DI2">
		<constructor-arg   value="mybatis"/>
		<constructor-arg   value="root"/>
		<constructor-arg   value="1234"/>
	</bean> 
	
<!-- 	<bean id="di2" class="demo.DI2">
		<constructor-arg index="1"   value="mybatis"/>
		<constructor-arg index="2"  value="root"/>
		<constructor-arg index="0" value="1234" />
	</bean> -->	 
</beans>
  • (3)测试
	@Test
	public void test() {
		
		ApplicationContext ctx=new ClassPathXmlApplicationContext("spring.xml");
		DI2 di2= ctx.getBean(DI2.class);
		di2.toString();
		
	}

3 综合示例

【描述】

  • 使用分层开发模式,实现登录验证,并输入验证结果。

【目的】

  • 掌握Spring框架的基本应用,体验Ioc和DI注入对象方式以及Java EE的分层结构。
  • 掌握基于Spring框架的基本应用思路。

【步骤】(在上面示例基础上)

3.1 数据访问层

【文件位置】

  • dao包

【接口】

package dao;

public interface UserDao {
	public boolean login(String username,String pwd);
}

【实现】

package dao;

public class UserDaoImpl implements UserDao { 
	@Override
	public boolean login(String username, String pwd) {  
		if (username.equals("123") && pwd.equals("123"))
			return true;
		else
			return false;
	} 
}

3.2 服务层

【文件位置】

  • service包

【接口】

package service;

public interface UserService {
	public boolean login(String username,String pwd);
}

【实现】

package service;

import dao.UserDao;

public class UserServiceImpl implements UserService {
	private UserDao userDao;//接口类型!
	
	@Override
	public boolean login(String username, String pwd) { 
		return userDao.login(username, pwd);
	}

	public UserDao getUserDao() {
		return userDao;
	}

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

3.3 配置文件

<?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
	https://www.springframework.org/schema/beans/spring-beans.xsd">
	
	<bean id="userDao" class="dao.UserDaoImpl" />
 	
	<bean id="us" class="service.UserServiceImpl">
		<property name="userDao" ref="userDao"/>
	</bean>
</beans>


3.4 应用层(测试)

package chap6;

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

import service.UserService;
import service.UserServiceImpl;

public class TestDao {
	
	@Test
	public void test0() {
		ApplicationContext ctx=new ClassPathXmlApplicationContext("spring.xml");
		UserService us=ctx.getBean(UserServiceImpl.class);
		boolean bol=us.login("123", "1213");
		System.out.println(bol+"");
	}
}
举报

相关推荐

0 条评论