Java Spring框架介绍及编写一个工具类、实现Bean类注入
基本介绍
Spring是一个主流的Java Web轻量级开发框架;
Spring是分层的Java SE/EE full-stack轻量级开源框架,以 IoC(Inverse of Control,控制反转)和 AOP(Aspect Oriented Programming,面向切面编程)为内核;
用基本的JavaBean完成以前只能由EJB完成的工作。
实际开发中,服务器端采用三层体系架构,分别为表现层(web)、业务逻辑层(service)、持久层(dao)。
Spring 对每一层都提供了技术支持,在表现层提供了与 Struts2 框架的整合,在业务逻辑层可以管理事务和记录日志等,在持久层可以整合 Hibernate 和 JdbcTemplate 等技术。
优点
1.可以将所有对象的创建和依赖关系的维护交给 Spring 管理
2.内部提供了对各种优秀框架(如 Struts2、Hibernate、MyBatis 等)的直接支持
3.对Java EE开发中非常难用的一些API(JDBC、JavaMail、远程调用等)都提供了封装,使这些API应用的难度大大降低
4.支持JUnit4,可以通过注解方便地测试Spring程序
5.提供面向切面编程,可以方便地实现对程序进行权限拦截和运行监控等功能
6.只需要通过配置就可以完成对事务的管理,而无须手动编程
Spring配置及jar包导入
1.首先在下面网址下载好spring框架的zip压缩包
https://repo.spring.io/simple/libs-release-local/org/springframework/spring/
并在idea里创建好一个新项目
再创建web项目
2.
docs文件夹:包含 Spring 的 API 文档和开发规范
libs文件夹:包含开发需要的 JAR 包和源码包
schema文件夹:包含开发所需要的 schema 文件,在这些文件中定义了 Spring 相关配置文件的约束
3.其中下面4个jar包是spring框架的基础包,分别对应spring容器的4个模块
(1)是基本的核心工具类,Spring其他组件都要用到这个包中的类
(2)所有应用都要用到的,它包含访问配置文件、创建和管理bean以及进行IoC/DI操作相关的所有类
(3)提供在基础IoC功能上的扩展服务,此外还提供许多企业级服务的支持
(4)定义了Spring的表达式语言
备注:在使用Spring开发时,除了其自带的jar包以外,还需要一个第三方jar包commons.logging处理日志信息,这个jar包一般包含在apache服务器里,也可以在下面网址单独下载。
http://commons.apache.org/proper/commons-logging/download_logging.cgi
4.在项目下创建lib文件夹,把上面提到的jar包都复制进去,我这里把所有的包都复制进去了
5.创建spring、springMVC,步骤和创建web项目一样
6.创建personDao接口
在src下创建名字为com的包,在里面创建名字叫PersonDao.java的文件,编辑内容如下
package com;
public interface PersonDao {
public void fun();
}
7.创建接口实现类PersonDaoImpl
在同样包目录下创建接口的实现类PersonDaoImpl,编辑内容如下
package com;
public class PersonDaoImpl implements PersonDao {
public void fun() {
System.out.println("fun方法已执行...");
}
}
8.创建配置文件
在src目录下创建spring核心配置文件applicationContext.xml,
刚创建好的时候上面显示未调用此配置文件,点击进行配置
9.往里面添加约束配置及由spring容器创建自定义类的实例对象(后面用标注代替其功能)
<?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:context="http://www.springframework.org/schema/context"<!--注解约束-->
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context<!--注解约束-->
http://www.springframework.org/schema/context/spring-context.xsd"><!--注解约束-->
<bean id="classID" class="com.PersonDaoImpl" /><!--由spring容器创建该类实例对象,使用注解则不写这条-->
<context:component-scan base-package="com"/><!--添加注解扫描-->
</beans>
10.编写测试类
通过spring容器创建实例对象的方式:
import com.PersonDao;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class Main {
public static void main(String[] args) {
//初始化spring容器并加载配置文件
ApplicationContext var = new ClassPathXmlApplicationContext("applicationContext.xml");
//通过容器获取personDao实例
//[自定义类名] [变量2] = ([自定义类名])[变量1].getBean("[自定义引用名]");
PersonDao var2 = (PersonDao) var.getBean("classID");
//[变量2].[自定义类里的方法];
var2.fun();
}
}
11.通过注解的方式(类注入):
关于注解,可以把注解看成是一个个全局函数,是为了方便开发而定义的,分别对应着不同的模块。
在这里使用类注入目的在于省略将目标类的标识及位置写入配置文件的步骤,简化开发
这里用到的注解:
@Component:是一个元注解,意思是可以注解其他类注解,当使用基于注解的配置和类路径扫描的时候,这些类就会被实例化。
@Override:是伪代码,用于表示被标注的方法是一个重写方法,系统可以帮你检查方法的正确性。
(1)编写接口
package com;
public interface PersonDao {
public void fun();
}
(2)编写接口实现类
package com;
import org.springframework.stereotype.Component;
@Component(value = "PersonDao")
public class PersonDaoImpl implements PersonDao {
@Override
public void fun() {
System.out.println("fun方法已执行...");
}
}
(3)编写测试类
import com.PersonDao;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class Main {
public static void main(String[] args) {
ApplicationContext var = new ClassPathXmlApplicationContext("applicationContext.xml");
PersonDao var2 = (PersonDao) var.getBean("PersonDao");//这里和上一种办法不同的地方是直接指向注解了的类的接口,而不是配置文件的Bean id
var2.fun();
}
}