spring也好久沒用了,先複習一下spring的基本用法,然後去看源碼吧,我已經把spring常用操作寫成demo上傳到碼雲了,還有什麼功能想到就加上,點這個進入碼雲,這篇文章就水一下吧
example層
package example;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import pojo.User;
public class 在Java中獲取bean {
public static void main(String[] args) {
//創建應用上下文
ApplicationContext context = new ClassPathXmlApplicationContext("classpath:spring.xml");
//通過bean的name或class對象獲取對應的bean對象
// User u=context.getBean(User.class);
User u=(User) context.getBean("user");
System.out.println(u.getName());
}
}
package example;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.stereotype.Controller;
import pojo.User;
@Controller
public class 指定自動注入的bean {
//自動注入
@Autowired
//指定自動注入的bean的name
@Qualifier("u")
User user;
public static void main(String[] args) {
ApplicationContext context = new ClassPathXmlApplicationContext("classpath:spring.xml");
System.out.println(context.getBean(指定自動注入的bean.class).user.getName());
}
}
package example;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.stereotype.Controller;
import pojo.User;
@Controller
public class 使用自動注入獲取bean {
//自動注入
@Autowired
User user;
public static void main(String[] args) {
ApplicationContext context = new ClassPathXmlApplicationContext("classpath:spring.xml");
System.out.println(context.getBean(使用自動注入獲取bean.class).user.getName());
}
}
package example;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.*;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.stereotype.Controller;
@Aspect//註解爲切面
@Controller
public class 使用aop {
//可以使用@Pointcut將該方法綁定爲切點定義方法,以替代繁瑣的定義
@Pointcut("execution(* example.使用aop.AopTest.test(..))")
public void Pointcut(){}
//可以通過args(id)的方式獲取傳入參數
//前置通知
@Before("Pointcut()&&args(id)")
public void before(String id){
System.out.println("前置通知,傳入參數爲:"+id);
}
//定義切點,後置通知
@After("Pointcut()")
public void after(){
System.out.println("後置通知");
}
//定義切點,正常執行通知
@AfterReturning("Pointcut()")
public void afterReturning(){
System.out.println("正常執行通知");
}
//定義切點,異常結束通知
@AfterThrowing("Pointcut()")
public void afterThrowing(){
System.out.println("異常結束通知");
}
//環繞通知
@Around("Pointcut()")
public void around(ProceedingJoinPoint joinPoint) throws Throwable{
try {
System.out.println("環繞前置通知");
Object[] objects = joinPoint.getArgs();//獲取傳入參數
for (Object o : objects)//打印傳入參數
System.out.println("環繞通知,打印傳入參數:"+o);
joinPoint.proceed();//執行下一個通知或目標方法
System.out.println("環繞後置通知");
System.out.println("環繞通知正常執行通知");
}catch (Exception e){
System.out.println("環繞通知異常結束通知");
}
}
public static void main(String[] args) {
ApplicationContext context = new ClassPathXmlApplicationContext("classpath:spring.xml");
context.getBean(AopTest.class).test("test");
}
@Controller
/**
* 測試類
*/
public class AopTest {
void test(String id){
}
}
}
package example;
import dao.UserDao;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.stereotype.Controller;
import org.springframework.transaction.annotation.Transactional;
import pojo.User;
@Controller
public class 配置事務 {
@Autowired
UserDao userDao;
//發生任何異常都回滾,事務時間超過十秒(該10秒僅爲sql執行時間,sleep無效)回滾
@Transactional(rollbackFor = Exception.class, timeout = 10)
public void addUser(User user) throws Exception {
userDao.addUser(user);
// if(true)
// throw new Exception();
}
public static void main(String[] args) {
ApplicationContext context = new ClassPathXmlApplicationContext("classpath:spring.xml");
User user=new User();
user.setName("hh");
try {
context.getBean(配置事務.class).addUser(user);
} catch (Exception e) {
e.printStackTrace();
}
}
}
dao層
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="dao.UserDao">
<resultMap id="BaseResultMap" type="pojo.User">
<id column="name" property="name" />
</resultMap>
<insert id="addUser" parameterType="pojo.User">
insert into user(name)values(#{name})
</insert>
</mapper>
package dao;
import pojo.User;
/**
* sql
* CREATE TABLE user (
* `name` varchar(255) NULL
* );
*/
public interface UserDao {
/**
* 添加用戶
*/
void addUser(User user);
}
pojo層
package pojo;
public class User {
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
配置文件
jdbc.driver= com.mysql.jdbc.Driver
jdbc.url= jdbc:mysql://60.205.216.134:3306/xx
jdbc.name= xx
jdbc.pwd= 1234
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<mappers>
<mapper resource="dao/UserDao.xml"/>
</mappers>
</configuration>
<?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">
<context:property-placeholder location="classpath:application.properties"/>
<!--開啓註解掃描-->
<context:annotation-config/>
<!-- 配置容器資源掃描的包 -->
<context:component-scan base-package="example"/>
<!--開啓aop註解掃描-->
<aop:aspectj-autoproxy/>
<bean class="pojo.User" name="user">
<property name="name" value="1234"/>
</bean>
<bean class="pojo.User" name="u">
<property name="name" value="666"/>
</bean>
<!--aop:xml配置-->
<aop:config>
<!--範圍-->
<aop:pointcut expression="execution(* example.使用aop.AopTest.test(..))" id="pointcut"/>
<!--切面類-->
<aop:aspect ref="使用aop">
<!--前置通知-->
<!--暫時無法解決傳入參數的問題,略過-->
<!--<aop:before method="before" pointcut-ref="pointcut"/>-->
<!--後置通知-->
<aop:after method="after" pointcut-ref="pointcut"/>
<!--正常結束通知-->
<aop:after-returning method="afterReturning" pointcut-ref="pointcut"/>
<!--異常結束通知-->
<aop:after-throwing method="afterThrowing" pointcut-ref="pointcut"/>
<!--環繞通知-->
<aop:around method="around" pointcut-ref="pointcut"/>
</aop:aspect>
</aop:config>
<!--配置連接池對象:Connection-->
<bean id="dateSource" class="com.mchange.v2.c3p0.DriverManagerDataSource">
<property name="user" value="${jdbc.name}"/>
<property name="password" value="${jdbc.pwd}"/>
<property name="driverClass" value="${jdbc.driver}"/>
<property name="jdbcUrl" value="${jdbc.url}"/>
</bean>
<!--SqlSessionFactory對象:負責對Connection進行包裝生成SqlSession-->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<!--把連接池交給該對象-->
<property name="dataSource" ref="dateSource"/>
<!--加載mybatis主配置文件-->
<property name="configLocation" value="classpath:mybatis.cfg.xml"/>
</bean>
<!--配置自動生成接口實現類的對象,並且註冊到IOC容器中-->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<!--把SqlSessionFactory對象交給該對象-->
<property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"/>
<!--指定dao層接口所在的位置-->
<property name="basePackage" value="dao"/>
</bean>
<!--定義事務管理器-->
<bean id="transactionManager"
class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dateSource"></property>
</bean>
<!-- 開啓事務註解@Transactional支持 -->
<tx:annotation-driven transaction-manager="transactionManager" />
</beans>