Spring框架
一、spring框架简单介绍
1.什么是Spring框架
Spring框架是由于软件开发的复杂性而创建的。Spring使用的是基本的JavaBean来完成以前只可能由EJB完成的事情。然而,Spring的用途不仅仅限于服务器端的开发。从简单性、可测试性和松耦合性角度而言,绝大部分Java应用都可以从Spring中受益。
2.Spring框架的优点
(1)不依赖于应用服务器.
(2)IOC(控制反转)技术实现组件控制。通过DI(依赖注入)技术提高了组件之间的解耦。
(3)通过AOP(面向切面编程)技术实现安全、事务、日志功能的统一管理,提高复用。
(4)Spring框架可以几乎与其他任何框架进行良好的整合使用.
(5)Spring所有项目之间不相互依赖。
二、spring框架案例(以学生为例)
1.配置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:context="http://www.springframework.org/schema/context"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:tx="http://www.springframework.org/schema/tx"
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
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd">
<!-- 1. 使用IOC的注解扫描与支持: base-package - 父路径 -->
<context:component-scan base-package="com.company"/>
<!-- 2. 配置数据源 -->
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/idea?useSSL=true&characterEncoding=utf-8"/>
<property name="username" value="root"/>
<property name="password" value="123456"/>
</bean>
<!-- 3. 将dataSource 注入到JDBCTemplate -->
<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
<property name="dataSource" ref="dataSource"/>
</bean>
</beans>
2.bean层(实体类)
package com.company.bean;
public class Student {
private int id;
private String name;
private String sex;
private String age;
public Student() {
}
public Student(int id, String name, String sex, String age) {
this.id = id;
this.name = name;
this.sex = sex;
this.age = age;
}
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 String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public String getAge() {
return age;
}
public void setAge(String age) {
this.age = age;
}
@Override
public String toString() {
return "Student{" +
"id=" + id +
", name='" + name + '\'' +
", sex='" + sex + '\'' +
", age='" + age + '\'' +
'}';
}
}
3.dao层
(1)接口
package com.company.dao;
import com.company.bean.Student;
public interface IStudentDao {
// 增加学生
boolean addStu(Student student);
}
(2)实现类
package com.company.dao.impl;
import com.company.bean.Student;
import com.company.dao.IStudentDao;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Repository;
@Repository
public class StudentDaoImpl implements IStudentDao {
@Autowired
private JdbcTemplate jdbcTemplate;
// 注入方法
public void setJdbcTemplate(JdbcTemplate jdbcTemplate){
this.jdbcTemplate = jdbcTemplate;
}
// 增加学生
@Override
public boolean addStu(Student student) {
boolean flag = false;
String sql = "insert into tb_student values(?,?,?,?)";
int row = jdbcTemplate.update(sql, student.getId(), student.getName(), student.getSex(), student.getAge());
if (row > 0) {
flag = true;
}
return flag;
}
}
4.service层
(1)接口
package com.company.service;
import com.company.bean.Student;
public interface IStudentService {
// 增加学生
boolean addStu(Student student);
}
(2)实现类
package com.company.service.impl;
import com.company.bean.Student;
import com.company.dao.IStudentDao;
import com.company.service.IStudentService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@Service
public class StudentServiceImpl implements IStudentService {
@Autowired
private IStudentDao studentDao;
@Override
public boolean addStu(Student student) {
return studentDao.addStu(student);
}
}
5.测试类
package com.company.test;
import com.company.bean.Student;
import com.company.service.impl.StudentServiceImpl;
import org.junit.Before;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class TestSpringJDBC {
private ApplicationContext ac;
@Before
public void into(){
ac = new ClassPathXmlApplicationContext("applicationContext.xml");
}
// 2. 写方法进行测试
@Test
public void testAddStu(){
// 1. 给定学生信息
Student stu = new Student(1,"小王","男","18");
// 2. 调用Service进行测试
StudentServiceImpl ssi = (StudentServiceImpl)ac.getBean("studentServiceImpl");
boolean b = ssi.addStu(stu);
if (b) {
System.out.println("增加学生成功 ... ");
} else {
System.out.println("增加学生失败 ... ");
}
}
}