1.Junit例子
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("file:src/main/resources/applicationContext.xml")
public class empControllerTest {
@Test
public void test() {
System.out.println("Hello World");
}
}
2.控制反转&依赖注入例子
setter注入
//接口类
public interface IDeviceWriter {
public void saveToDevice();
}
//实现类
public class FloppyWriter implements IDeviceWriter {
public void saveToDevice() {
System.out.println("储存至软盘…");
}
}
//实现类
public class UsbDiskWriter implements IDeviceWriter {
public void saveToDevice() {
System.out.println("储存至移动硬盘…");
}
}
public interface IDeviceWriter {
public void saveToDevice();
}
//实现类
public class FloppyWriter implements IDeviceWriter {
public void saveToDevice() {
System.out.println("储存至软盘…");
}
}
//实现类
public class UsbDiskWriter implements IDeviceWriter {
public void saveToDevice() {
System.out.println("储存至移动硬盘…");
}
}
//注入类!!下面getter,setter和save方法,setter需要上面两个实现类一个,才能让save有东西保存。
public class BusinessBean {
private IDeviceWriter writer;
public void setDeviceWriter(IDeviceWriter writer) {
this.writer = writer;
}
public IDeviceWriter getDeviceWriter() {
return writer;
}
public void save() {
if (writer == null) {
throw new RuntimeException("DeviceWriter needed...");
}
writer.saveToDevice();
}
}
public class BusinessBean {
private IDeviceWriter writer;
public void setDeviceWriter(IDeviceWriter writer) {
this.writer = writer;
}
public IDeviceWriter getDeviceWriter() {
return writer;
}
public void save() {
if (writer == null) {
throw new RuntimeException("DeviceWriter needed...");
}
writer.saveToDevice();
}
}
//applicationContext.xml先控制反转两个bean给spring容器,再setter注入
<bean id="floppy" class="com.suguowen.FloppyWriter"/>
<bean id="usb" class="com.suguowen.UsbDiskWriter"/>
<bean id="businessBean"
class="com.suguowen.BusinessBean">
//setter注入
<property name="deviceWriter">
<ref bean="floppy"/>
</property>
</bean>
<bean id="floppy" class="com.suguowen.FloppyWriter"/>
<bean id="usb" class="com.suguowen.UsbDiskWriter"/>
<bean id="businessBean"
class="com.suguowen.BusinessBean">
//setter注入
<property name="deviceWriter">
<ref bean="floppy"/>
</property>
</bean>
构造器注入
//在上面的基础上替换BusinessBean,setter去了,增加构造方法
public class BusinessBean {
private IDeviceWriter writer;
private String name;
public BusinessBean(IDeviceWriter writer,String name) {
// TODO Auto-generated constructor stub
this.name = name;
this.writer = writer;
}
/*public void setDeviceWriter(IDeviceWriter writer) {
this.writer = writer;
} */
public IDeviceWriter getDeviceWriter() {
return writer;
}
public void save() {
System.out.println("i am :" + name);
if (writer == null) {
throw new RuntimeException("DeviceWriter needed...");
}
writer.saveToDevice();
}
}
public class BusinessBean {
private IDeviceWriter writer;
private String name;
public BusinessBean(IDeviceWriter writer,String name) {
// TODO Auto-generated constructor stub
this.name = name;
this.writer = writer;
}
/*public void setDeviceWriter(IDeviceWriter writer) {
this.writer = writer;
} */
public IDeviceWriter getDeviceWriter() {
return writer;
}
public void save() {
System.out.println("i am :" + name);
if (writer == null) {
throw new RuntimeException("DeviceWriter needed...");
}
writer.saveToDevice();
}
}
//applicationContext.xml先控制反转两个bean给spring容器,再constructor注入
<bean id="floppy" class="com.suguowen.FloppyWriter"/>
<bean id="usb" class="com.suguowen.UsbDiskWriter"/>
<bean id="businessBean"
class="com.suguowen.BusinessBean">
<!-- <property name="deviceWriter">
<ref bean="floppy"/>
</property> -->
//constructor注入
<constructor-arg> <ref bean="floppy"/> </constructor-arg>
<constructor-arg name="name" value="A-Lin"> </constructor-arg>
</bean>
//constructor注入
<constructor-arg> <ref bean="floppy"/> </constructor-arg>
<constructor-arg name="name" value="A-Lin"> </constructor-arg>
</bean>
除此之外,还有list,map等注入,到时候用再百度。
3.注解装配bean例子
package com.suguowen.controller;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;
import com.suguowen.bean.Department;
import com.suguowen.bean.Employee;
import com.suguowen.bean.Msg;
import com.suguowen.service.DepartmentService;
/*
* 处理和部门有关的请求
*/
//@Controller控制反转把当前类放在spring容器
@Controller
public class DepartmentController {
//@Autowired依赖注入给属性departmentService,通过类查找
@Autowired
private DepartmentService departmentService;
/*
* 返回所有部门信息
*/
@RequestMapping("/depts")
@ResponseBody
public Msg getDepts() {
System.out.println("=========进入controller=======");
List<Department> list = departmentService.getDepts();
/* for (Department department : list) {
System.out.println(department.getDeptId());
System.out.println(department.getDeptName());
}*/
return Msg.success().add("depts", list);
}
}
//@Controller控制反转把当前类放在spring容器
@Controller
public class DepartmentController {
//@Autowired依赖注入给属性departmentService,通过类查找
@Autowired
private DepartmentService departmentService;
/*
* 返回所有部门信息
*/
@RequestMapping("/depts")
@ResponseBody
public Msg getDepts() {
System.out.println("=========进入controller=======");
List<Department> list = departmentService.getDepts();
/* for (Department department : list) {
System.out.println(department.getDeptId());
System.out.println(department.getDeptName());
}*/
return Msg.success().add("depts", list);
}
}
4.aop简单例子
//普通类
public class MyAop {
public void hello() {
System.out.println(" ===i am HERO===");
}
}
//切面类,其实也是普通类,只是xml的配置,可以让他变成切面类。
public class HelloAop {
public void afterAop() {
System.out.println("hello , i am after man!!");
}
}
//applicationContext.xml配置,pointCut指定在切的地点,aop:aspect指定谁来切。
<bean id="hellpAop" class="com.suguowen.aop.HelloAop"></bean>
<bean id="myaop" class="com.suguowen.MyAop" />
<!-- AOP -->
<aop:config>
<aop:pointcut expression="execution(* com.suguowen.*.*(..))"
id="holo" />
<!-- qiemian -->
<aop:aspect ref="hellpAop">
<aop:after method="afterAop" pointcut-ref="holo"/>
</aop:aspect>
</aop:config>
//Junit测试
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("file:src/main/resources/applicationContext.xml")
public class AopTest {
@Resource
MyAop myAop;
@Test
public void test() {
myAop.hello();
}
}
public class MyAop {
public void hello() {
System.out.println(" ===i am HERO===");
}
}
//切面类,其实也是普通类,只是xml的配置,可以让他变成切面类。
public class HelloAop {
public void afterAop() {
System.out.println("hello , i am after man!!");
}
}
//applicationContext.xml配置,pointCut指定在切的地点,aop:aspect指定谁来切。
<bean id="hellpAop" class="com.suguowen.aop.HelloAop"></bean>
<bean id="myaop" class="com.suguowen.MyAop" />
<!-- AOP -->
<aop:config>
<aop:pointcut expression="execution(* com.suguowen.*.*(..))"
id="holo" />
<!-- qiemian -->
<aop:aspect ref="hellpAop">
<aop:after method="afterAop" pointcut-ref="holo"/>
</aop:aspect>
</aop:config>
//Junit测试
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("file:src/main/resources/applicationContext.xml")
public class AopTest {
@Resource
MyAop myAop;
@Test
public void test() {
myAop.hello();
}
}
5.基于注解的Aop实现
普通类
public class MyAop {
public void hello() {
System.out.println(" ===i am HERO===");
}
}
public class MyAop {
public void hello() {
System.out.println(" ===i am HERO===");
}
}
切面类(包含切点,切面)
@Aspect
public class HelloAop {
//定义切的范围
@Pointcut("execution(* com.suguowen.*.*(..))")
private void allMethod() {};
//定义前置通知
@Before("allMethod()")
public void beforeAop() {
System.out.println("hello , i am before man!!");
}
//定义后置通知
@AfterReturning("allMethod()")
public void afterAop() {
System.out.println("hello , i am after man!!");
}
}
@Aspect
public class HelloAop {
//定义切的范围
@Pointcut("execution(* com.suguowen.*.*(..))")
private void allMethod() {};
//定义前置通知
@Before("allMethod()")
public void beforeAop() {
System.out.println("hello , i am before man!!");
}
//定义后置通知
@AfterReturning("allMethod()")
public void afterAop() {
System.out.println("hello , i am after man!!");
}
}
//applicationContext.xml非常简单的开启注解处理器
<bean id="hellpAop" class="com.suguowen.aop.HelloAop"></bean>
<bean id="myaop" class="com.suguowen.MyAop" />
<!-- 开启给予@AspectJ切面的注解处理器 -->
<aop:aspectj-autoproxy></aop:aspectj-autoproxy>
//applicationContext.xml非常简单的开启注解处理器
<bean id="hellpAop" class="com.suguowen.aop.HelloAop"></bean>
<bean id="myaop" class="com.suguowen.MyAop" />
<!-- 开启给予@AspectJ切面的注解处理器 -->
<aop:aspectj-autoproxy></aop:aspectj-autoproxy>
6.数据源的编写
//applicationContext.xml
<!-- spring配置,配置业务逻辑相关 -->
<!-- =======================2.数据源,事务控制 ========================== -->
<!-- 读取mysql基本配置信息 -->
<context:property-placeholder location="classpath:dbconfig.properties" />
<!-- 数据库连接池(替换普通dataSource数据源) -->
<bean id="pooledDataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
<property name="jdbcUrl" value="${jdbc.jdbcUrl}"></property>
<property name="driverClass" value="${jdbc.driverClass}"></property>
<property name="user" value="${jdbc.user}"></property>
<property name="password" value="${jdbc.password}"></property>
</bean>
//dpconfig.properties
jdbc.jdbcUrl=jdbc:mysql://localhost:3306/ssm_crud
jdbc.driverClass=com.mysql.jdbc.Driver
jdbc.user=root
jdbc.password=root
jdbc.jdbcUrl=jdbc:mysql://localhost:3306/ssm_crud
jdbc.driverClass=com.mysql.jdbc.Driver
jdbc.user=root
jdbc.password=root