复习spring基本操作

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>
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章