spring开发

Spring开发实战

1.Spring项目构建

2.Spring开发步骤

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-xnsvyEID-1612786566029)(D:\code\source_posts\spring开发\image-20210122182416415.png?lastModify=1611459280)]

  1. 导入spring开发的基本包坐标(pom.xml)

    image-20210122182416415

  2. 编写Dao接口和实现类(java)

    image-20210122184128355

  3. 创建Spring核心配置文件resources(applicationContext.xml)

    image-20210122184148789

  4. 在Spring配置文件中配置UserDaoImpl

  5. 使用spring的API获得Bean实例

    image-20210122184230706

3.Spring配置文件

3.1Bean标签基本配置

默认情况下调用类重无参构造函数

基本属性:

id:Bean实例在Spring容器中的唯一标识

class:Bean的全限定名称

3.2Bean标签范围配置

scope(对象的作用范围):singleton(默认的、单例的)、prototype(多例)、request、session、global session

3.3Bean生命周期配置

init-method:指定类中的初始化方法

destory-method:指定类中销毁方法

3.4Bean实例化的三种方式
  • 无参构造方法实例化
  • 工厂静态方法实例化
  • 工厂实例方法实例化
3.5Bean配置文件-依赖注入

在Spring容器中,将UserDao设置到UserService内部

依赖注入(Dependency Injection):IOC的具体实现

注入方法:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">

    <bean id="userDao" class="com.zzx.dao.impl.UserDaoImpl"></bean>
    <bean id="userService" class="com.zzx.service.impl.UserServiceImpl">
        <property name="userDao" ref="userDao"></property> 
        <!--name属性名称 value注入属性值 ref注入对象引用值-->
    </bean>
</beans>
  • 构造方法

  • set方法

    public class UserServiceImpl implements UserService {
        private UserDao userDao;
        public void setUserDao(UserDao userDao){
            this.userDao = userDao;
        }
        public void save(){
            userDao.save();
        }
    }
    

4.Spring相应API

4.1 ApplicationContext的实现类
  1. ClassPathXmlApplicationContext(从类的根路径下加载配置文件)
  2. FileSystemXmlApplicationContext(从磁盘路径加载)
  3. AnnotationConfigApplicationContext(使用注解配置容器对象)
4.2 getBean()方法使用
  1. public Object getBean(String name) //通过id
  2. public T getBean(Class requiredType) //根据Class

5.Spring配置数据源

5.1数据源(连接池)

常见数据源(连接池):DBCP、C3P0、BoneCP、Druid

        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.22</version>
        </dependency>
        <dependency>
            <groupId>c3p0</groupId>
            <artifactId>c3p0</artifactId>
            <version>0.9.1.1</version>
        </dependency>
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid</artifactId>
            <version>1.1.13</version>
        </dependency>
jdbc.driver=com.mysql.cj.jdbc.Driver
jdbc.url=jdbc:mysql://127.0.0.1:3306/db01?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=GMT
jdbc.username=root
jdbc.password=abc@123
5.2通过Spring加载properities
  • pom文件加dependency(Spring-context)

  • 配置bean

    image-20210123143159702

6.Spring注解开发

简化配置

6.1 Spring原始注解(替代配置)

image-20210123143535484

//Dao层
@Component("userDao")  //表示Spring Ioc会把这个类扫描成一个bean实例,其中value表示类在Spring中的Id
public class UserDaoImpl implements UserDao {
    public void save(){
        System.out.println("saving");
    }
}

//Service层
@Component("userService")
public class UserServiceImpl implements UserService {
    //自动装配技术:Spring自己发现对应的Bean,自动完成装配工作的方式
    @Autowired  //按照数据类型从Spring容器中进行匹配
    @Qualifier("userDao")  //按照id从容器中进行匹配,要结合@AutoWired一起使用
    private UserDao userDao;
    public void setUserDao(UserDao userDao){
        this.userDao = userDao;
    }
    public void save(){
        userDao.save();
    }
}
//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"
       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="userDao" class="com.zzx.dao.impl.UserDaoImpl"></bean>
    <bean id="userService" class="com.zzx.service.impl.UserServiceImpl">
        <property name="userDao" ref="userDao"></property>
    </bean>

    <!--配置组件扫描-->
    <context:component-scan base-package="com.zzx"/>
</beans>
6.2 Spring新注解

@Configuration:必须要有,用于解析其中的@Bean注解

@Bean: 注解在方法上,使之成为Spring的Bean资源

package pojo;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class BeanTester {

    @Bean(name = "testBean")
    public String test() {
        String str = "测试@Bean注解";
        return str;
    }
}

7.Spring AOP

7.1使用注解开发Spring AOP
  1. 选择连接点(某个方法)

       //pojo.Landlord
    
    	....
        public void service() {
            // 仅仅只是实现了核心的业务功能
            System.out.println("签合同");
            System.out.println("收房租");
        }
        ....
    
    
  2. 创建切面

    (可以把切面理解为一个拦截器,当程序运行到连接点的时候,被拦截下来,在开头加入了初始化的方法,在结尾也加入了销毁的方法)

    package aspect;
    
    import org.aspectj.lang.annotation.After;
    import org.aspectj.lang.annotation.Aspect;
    import org.aspectj.lang.annotation.Before;
    import org.springframework.stereotype.Component;
    
    @Component   
    @Aspect   //使用该注解,Spring IoC容器会认为这是一个切面
    class Broker {
    	/*
        @Pointcut("execution(* pojo.Landlord.service())")
    	public void lService() {
    	}
        */
        @Before("execution(* pojo.Landlord.service())")    //前置通知,在连接点方法前使用
        public void before(){
            System.out.println("带租客看房");
            System.out.println("谈价格");
        }
    
        @After("execution(* pojo.Landlord.service())")   //后置通知,在连接点方法后调用
        public void after(){
            System.out.println("交钥匙");
        }
        
        /*
         使用 @Around 注解来同时完成前置和后置通知
    	@Around("execution(* pojo.Landlord.service())")
    	public void around(ProceedingJoinPoint joinPoint) {
    		System.out.println("带租客看房");
    		System.out.println("谈价格");
    
    		try {
    			joinPoint.proceed();
    		} catch (Throwable throwable) {
    			throwable.printStackTrace();
    		}
    
    		System.out.println("交钥匙");
    	}
    	*/
    }
    }
    
    
  3. 定义切点

    • execution:代表执行方法的时候会触发
    • * :代表任意返回类型的方法
    • pojo.Landlord:代表类的全限定名
    • service():被拦截的方法名称
  4. 测试AOP

7.2使用XML配置开发Spring AOP
<!-- 装配 Bean-->
<bean name="landlord" class="pojo.Landlord"/>
<bean id="broker" class="aspect.Broker"/>

<!-- 配置AOP -->
<aop:config>
    <!-- where:在哪些地方(包..方法)做增加 -->
    <aop:pointcut id="landlordPoint"
                  expression="execution(* pojo.Landlord.service())"/>
    <!-- what:做什么增强 -->
    <aop:aspect id="logAspect" ref="broker">
        <!-- when:在什么时机(方法前//前后) -->
        <aop:around pointcut-ref="landlordPoint" method="around"/>
    </aop:aspect>
</aop:config>

8.Jdbc Template基本使用

8.1 JdbcTemplate开发步骤
  1. 导入spring-jdbc和spring-tx坐标
       <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-jdbc</artifactId>
            <version>5.3.1</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-tx</artifactId>
            <version>5.3.1</version>
        </dependency>
  1. 创建数据库表和实体

    image-20210125210551544

  2. 创建JdbcTemplate对象

  3. 执行数据库操作

    image-20210125211209515

public class JdbcTemplateTest {
    @Test
    public void test1() throws Exception {
        //创建数据源
        ComboPooledDataSource dataSource = new ComboPooledDataSource();
        dataSource.setDriverClass("com.mysql.cj.jdbc.Driver");
        dataSource.setJdbcUrl("jdbc:mysql://127.0.0.1:3306/db01?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=GMT");
        dataSource.setUser("root");
        dataSource.setPassword("abc@123");
        JdbcTemplate jdbcTemplate = new JdbcTemplate();
        jdbcTemplate.setDataSource(dataSource);  //设置数据源
        //执行操作
        int row = jdbcTemplate.update("insert into account values(?,?)","a",5000);
        System.out.println(row);
    }
}
8.2 Spring开发JdbcTemplate

image-20210125210844790

9.Spring事务控制

image-20210125212949035

  • ​ @Transcational
  • image-20210125212532889
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值