spring学习巩固

Spring IOC(xml)

//依赖
 <dependencies>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>5.1.8.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-test</artifactId>
            <version>5.1.8.RELEASE</version>
        </dependency>
    </dependencies>
//Person类
@Component("person")
public class Person {
    private String name;
    private  Integer age;
    //自定义成员变量
    private  Computer computer;
    public Person() {
        super();
    }
    public Person(String name, Integer age, Computer computer) {
        this.name = name;
        this.age = age;
        this.computer = computer;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public Integer getAge() {
        return age;
    }
    public void setAge(Integer age) {
        this.age = age;
    }
    public Computer getComputer() {
        return computer;
    }
    public void setComputer(Computer computer) {
        this.computer = computer;
    }
    @Override
    public String toString() {
        return "Person{" +
                "name='" + name + '\'' +
                ", age=" + age +
                ", computer=" + computer +
                '}';
    }
}
//Cmputer类
public class Computer {
    private  String brand;
    private  String color;
    private  Double price;
    public Computer() {
        super();
    }
    public Computer(String brand, String color, Double price) {
        this.brand = brand;
        this.color = color;
        this.price = price;
    }
    public String getBrand() {
        return brand;
    }

    public void setBrand(String brand) {
        this.brand = brand;
    }

    public String getColor() {
        return color;
    }

    public void setColor(String color) {
        this.color = color;
    }

    public Double getPrice() {
        return price;
    }

    public void setPrice(Double price) {
        this.price = price;
    }

    @Override
    public String toString() {
        return "Computer{" +
                "brand='" + brand + '\'' +
                ", color='" + color + '\'' +
                ", price=" + price +
                '}';
    }
}

xml配置

<context:component-scan base-package="zlb.demo01"></context:component-scan>
//通过set方法注入属性
<!--配置Person-->
        <bean id="person" class="zlb.demo01.Person">
            <property name="name" value="胡歌"></property>
            <property name="age" value="18"></property>
            <property name="computer" ref="computer"></property>
         </bean>
         <!--配置computer-->
        <bean id="computer" class="zlb.demo01.Computer">
            <property name="brand" value="华硕"></property>
            <property name="color" value="白色"></property>
            <property name="price" value="5000.00"></property>
        </bean>

//通过构造器注入
 <!--配置Person-->
    <bean id="person" class="zlb.demo01.Person">
        <constructor-arg name="name" value="胡歌"></constructor-arg>
        <constructor-arg name="age" value="18"></constructor-arg>
        <constructor-arg name="computer" ref="computer"></constructor-arg>
    </bean>
      <!--配置Computer-->
    <bean id="computer" class="zlb.demo01.Computer">
        <constructor-arg name="brand" value="华硕"></constructor-arg>
        <constructor-arg name="color" value="白色"></constructor-arg>
        <constructor-arg name="price" value="6000.00"></constructor-arg>
    </bean>

测试类

//Spring整合Junit
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations ="classpath:beans.xml")
public class PersonTest {
    @Autowired
    private Person person;
    @Test
    public void  test(){

        System.out.println(person);

    }
}

Spring IOC(纯注解)

//Person类
@Component("person")
//通过内路径下的properties文件配置数据
@PropertySource("classpath:computer.properties")
public class Computer {
    @Value("${brand}")
    private  String brand;
    @Value("${color}")
    private  String color;
    @Value("${price}")
    private  Double price;
    public Computer() {
        super();
    }
    public Computer(String brand, String color, Double price) {
        this.brand = brand;
        this.color = color;
        this.price = price;
    }
    public String getBrand() {
        return brand;
    }
    public void setBrand(String brand) {
        this.brand = brand;
    }
    public String getColor() {
        return color;
    }
    public void setColor(String color) {
        this.color = color;
    }
    public Double getPrice() {
        return price;
    }
    public void setPrice(Double price) {
        this.price = price;
    }
    @Override
    public String toString() {
        return "Computer{" +
                "brand='" + brand + '\'' +
                ", color='" + color + '\'' +
                ", price=" + price +
                '}';
    }



//Compuer类
@Component("computer")
@PropertySource("classpath:computer.properties")
public class Computer {
    @Value("${brand}")
    private  String brand;
    @Value("${color}")
    private  String color;
    @Value("${price}")
    private  Double price;
    public Computer() {
        super();
    }
    public Computer(String brand, String color, Double price) {
        this.brand = brand;
        this.color = color;
        this.price = price;
    }
    public String getBrand() {
        return brand;
    }
    public void setBrand(String brand) {
        this.brand = brand;
    }
    public String getColor() {
        return color;
    }
    public void setColor(String color) {
        this.color = color;
    }
    public Double getPrice() {
        return price;
    }
    public void setPrice(Double price) {
        this.price = price;
    }
    @Override
    public String toString() {
        return "Computer{" +
                "brand='" + brand + '\'' +
                ", color='" + color + '\'' +
                ", price=" + price +
                '}';
    }
}

}

//配置类
/*@Configuration 表明这是一个配置类
@ComponentScan 扫描指定包下所有bean对象
* */
@Configuration
@ComponentScan(basePackages = "zlb.demo02")
public class ConfigClass {

}

person.properties文件
name=胡歌
age=18
computer。properties文件
brand=华硕
color=白色
price=5000.00

测试类

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = ConfigClass.class)
public class PersonTest {
    @Autowired
    private Person person;
    @Test
    public void  test(){
        System.out.println(person);
    }
}

基于Spring IOC的增删改查

依赖

<dependencies>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>5.1.8.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>commons-dbutils</groupId>
            <artifactId>commons-dbutils</artifactId>
            <version>1.4</version>
        </dependency>
        <dependency>
            <groupId>c3p0</groupId>
            <artifactId>c3p0</artifactId>
            <version>0.9.1.2</version>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.46</version>
        </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-test</artifactId>
            <version>5.1.8.RELEASE</version>
        </dependency>
    </dependencies>

/*
* 账户实体类
* */
public class Account {

    private  Integer id;
    private  String name;
    private  Double money;
    public Account() {
        super();
    }
    public Account(Integer id, String name, Double money) {
        this.name = name;
        this.id = id;
        this.money = money;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public Integer getId() {
        return id;
    }
    public void setId(Integer id) {
        this.id = id;
    }
    public Double getMoney() {
        return money;
    }
    public void setMoney(Double money) {
        this.money = money;
    }
    @Override
    public String toString() {
        return "Account{" +
                "name='" + name + '\'' +
                ", age=" + id+
                ", money=" + money +
                '}';
    }
}

/*
* 账户持久层接口
* */
public interface AccountDao {
    /*
    * 查询所有账户
    * */
  List<Account>  findAllAccount();

  /*根据Id查一个账户
  * */
  Account findAccountById(Integer accountId);

  //更新账户
  void updateAccount(Account account);

  /*
  * 插入新账户
  * */
  void insertAccount(Account account);

  /*
  * 根据Id删除账户
  * */
  void deleteById(Integer accountId);

}


/*
* 账户持久层实现类
* */
public class AccountDaoImpl implements AccountDao {
    
    private QueryRunner queryRunner;

    public void setQueryRunner(QueryRunner queryRunner) {
        this.queryRunner = queryRunner;
    }
    public List<Account> findAllAccount() {
        try {
           return queryRunner.query("select * from account", new BeanListHandler<Account>(Account.class));
        } catch (Exception e) {
            throw  new  RuntimeException(e);
        }
    }
    public Account findAccountById(Integer accountId) {
        try {
            return queryRunner.query("select * from account where id=?", new BeanHandler<Account>(Account.class), accountId);
        } catch (Exception e) {
            throw new RuntimeException(e);
        }
    }
    public void updateAccount(Account account) {
        try {
            queryRunner.update("update account set name=?,money=? where id=?",account.getName(),account.getMoney(),account.getId());
        } catch (Exception e) {
           throw  new RuntimeException(e);
        }
    }
    public void insertAccount(Account account) {
        try {
            queryRunner.update("insert into account (id,name,money)values(?,?,?)",account.getId(),account.getName(),account.getMoney());
        } catch (Exception e) {
            throw  new  RuntimeException(e);
        }
    }
    public void deleteById(Integer accountId) {
        try {
            queryRunner.update("delete from account where id=?",accountId);
        } catch (Exception e) {
           throw  new RuntimeException(e);
        }
    }
}


/*
* 账户业务层接口
* */
public interface AccountService {
    /*
     * 查询所有*/
    List<Account> findAllAccount();

    /*根据Id查一个
     * */
    Account findAccountById(Integer accountId);

    //更新
    void updateAccount(Account account);

    /*
     * 插入
     * */
    void insertAccount(Account account);

    /*
     * 根据Id删除
     * */
    void deleteById(Integer accountId);
}



/*
* 账户业务层实现类
* */
public class AccountServiceImpl implements AccountService {
    private AccountDao accountDao;
    public void setAccountDao(AccountDao accountDao) {
        this.accountDao = accountDao;
    }
    public List<Account> findAllAccount() {
        return accountDao.findAllAccount();
    }
    public Account findAccountById(Integer accountId) {
        return accountDao.findAccountById(accountId);
    }
    public void updateAccount(Account account) {
        accountDao.updateAccount(account);
    }
    public void insertAccount(Account account) {
        accountDao.insertAccount(account);
    }

    public void deleteById(Integer accountId) {
        accountDao.deleteById(accountId);
    }
}

xml配置

 <!--配置业务层-->
    <bean id="accountService" class="zlb.service.impl.AccountServiceImpl">
        <property name="accountDao" ref="accountDao"></property>
    </bean>
    <!--配置持久层-->
    <bean id="accountDao" class="zlb.dao.impl.AccountDaoImpl">
       <!--注入Query-->
        <property name="queryRunner" ref="runner"></property>
    </bean>
    <!--配置Query-->
    <bean id="runner" class="org.apache.commons.dbutils.QueryRunner">
       <!--注入数据源-->
        <constructor-arg name="ds" ref="dataSource"></constructor-arg>
    </bean>
    <!--配置数据源-->
    <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
        <property name="driverClass" value="com.mysql.jdbc.Driver"></property>
        <property name="jdbcUrl" value="jdbc:mysql://localhost:3306/eesy"></property>
        <property name="user" value="root"></property>
        <property name="password" value="151630"></property>
    </bean>

测试类

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = "classpath:beans.xml")
public class TestApp {
    @Autowired
    private AccountService accountService;
    @Test
    public void findOneById(){
        Account account = accountService.findAccountById(3);
        System.out.println(account);
    }
    @Test
    public void findAll(){
      List<Account> allAccount = accountService.findAllAccount();
        for (Account account : allAccount) {
            System.out.println(account);
        }
    }
    @Test
    public  void delete(){
        accountService.deleteById(10);
    }
    @Test
    public  void update(){
        Account account = accountService.findAccountById(3);
        account.setMoney(5000d);
        account.setName("java");
        accountService.updateAccount(account);
    }
    @Test
    public void insert(){
        accountService.insertAccount(new Account(35,"spring",6000d));
    }
}

基于Spring IOC的增删改查(全注解)

新增一个配置类其他类全用注解配置

@Configuration
@ComponentScan("zlb")
public class SpringConfiguration {

    /**
     * 创建一个数据源,并存入 spring 容器中
     */
    @Bean(name="dataSource")
    public DataSource createDataSource() {
        try {
            ComboPooledDataSource ds = new ComboPooledDataSource();
            ds.setUser("root");
            ds.setPassword("151630");
            ds.setDriverClass("com.mysql.jdbc.Driver");
            ds.setJdbcUrl("jdbc:mysql://localhost:3306/eesy");
            return ds;
        } catch (Exception e) {
            throw new RuntimeException(e);
        } }
    /**
     * 创建一个 Query,并且也存入 spring 容器中
     */
    @Bean(name="runner")
    public QueryRunner createQuery(DataSource dataSource) {
        return new QueryRunner(dataSource);
    } }

动态代理

/*
* 接口类
* */
public interface IProducer {
    //卖产品
    void saleProduct(float money);
    
    //售后服务
     void afterService(float money);
}


/*
* 实现类生产者
* */
public class Produce implements IProducer {

    public void saleProduct(float money) {
    }
    public void afterService(float money) {
        System.out.println(money);

    }
}


import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
public class Client {
    public static void main(String[] args) {
     final Produce produce=new Produce();
      
       final IProducer iProducer =(IProducer) Proxy.newProxyInstance(produce.getClass().getClassLoader(),
               produce.getClass().getInterfaces(), new InvocationHandler() {
                   public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
                      Object value=null;
                     Float money=(Float)args[0];
                     if ("afterService".equals(method.getName())) {
                         value = method.invoke(produce, money * 0.8f);
                     }
                     return  value;
                   }
               });
        iProducer.afterService(10000f);
    }
}

SpringAop(xml)

//被通知类
public class Phone {

    public  void  playMusic(Stirng name){
        System.out.println("正在播放音乐");

    }
}

//通知类
public class Message {
    public  void beforePrint(){
        System.out.println("正在打印前置信息");
    }
    public  void returningPrint(){

        System.out.println("正在打印返回信息");

    }
    public  void throwingPrint()
    {

        System.out.println("正在打印异常信息");

    }
    public  void afterPrint(){

        System.out.println("正在打印最终信息");

    }
    

 <!--配置被通知类-->
        <bean id="phone" class="zlb.dao.Phone"></bean>
        <!--配置通知类-->
        <bean id="message" class="zlb.Message"></bean>
       
        <!--开启AOP配置-->
        <aop:config>
         <!--配置切面点-->
         <!--说明哪个类是通知类-->
      <aop:aspect id="messageAdvice" ref="message">
      <aop:before method="beforePrint" pointcut-ref="pt"></aop:before>
      <aop:after-returning method="returningPrint" pointcut-ref="pt" ></aop:after-returning>
      <aop:after-throwing method="throwingPrint" pointcut-ref="pt"   ></aop:after-throwing>
      <aop:after method="afterPrint" pointcut-ref="pt"></aop:after>
     <!--切面表达式,建立通知类与被通知类的关系-->
      <aop:pointcut id="pt" expression="execution(* zlb.dao.*.*(..))"/>
       </aop:aspect>
        </aop:config>

环绕通知

public class Phone {

    public  String playMusic(String name){
        return  name;
    }
}


public class Message {
    public Object aroundPrint(ProceedingJoinPoint point) {
        Object value = null;
        String name = point.getSignature().getName();
        try {
            System.out.println("前置通知开始了,"+"被增强的方法名为:"+name+"参数是"+ Arrays.asList(point.getArgs()));
            Object[] args = point.getArgs();
            for (int i = 0; i < args.length; i++) {
                if (args[i].equals("江南")
                ) {
                    value = point.proceed(new Object[]{"醉赤壁"});
                }
                else {
                    value=point.proceed();
                }
        }
        System.out.println("返回通知开始了,"+"被增强的方法为:"+name+"返回结果是"+value);
            return value;

        } catch (Throwable th) {
            System.out.println("异常通知开始了,"+"被增强的方法名为:"+name+"异常为"+th);
            throw new RuntimeException(th);
        } finally {
            System.out.println("后置通知开始了,"+"方法;"+name+"结束啦");
        }


    }
}

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations ="classpath:beans.xml")
public class TestAop {
    @Autowired
    private Phone phone;
    @Test
    public  void test(){

    
        phone.playMusic("江南");
        System.out.println("============");
        phone.playMusic(null);

    }
}

在这里插入图片描述

SpringAop(全注解)

@Component("phone")
public class Phone {

    public  void playMusic(){
        System.out.println("正在播放音乐");
       
    }
}


@Component("message")
@Aspect
public class Message {
    @Pointcut("execution(* zlb.*.*(..))")
    public void pt() {
    }

      @Before("pt()")
    public  void beforePrint(){
        System.out.println("正在打印前置信息");
    }
    @After("pt()")
    public  void returningPrint(){

        System.out.println("正在打印返回信息");

    }
    @AfterThrowing("pt()")
    public  void throwingPrint()
    {

        System.out.println("正在打印异常信息");

    }
    @After("pt()")
    public  void afterPrint(){

        System.out.println("正在打印最终信息");

    }
    }
//配置类
@Configuration
@ComponentScan(basePackages = "zlb")
@EnableAspectJAutoProxy
public class ConfigClass {


}

//测试类
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = ConfigClass.class)
public class AppTest {
    @Autowired
    private Phone phone;

    @Test
    public  void test(){

       phone.playMusic();


    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
对于初学者来说,学习Spring框架可以按照以下路线进行: 1. Java基础知识:在学习Spring之前,建议先掌握Java的基础知识,包括面向对象编程、集合框架、异常处理等内容。 2. IoC和DI概念:Spring框架的核心思想是控制反转(IoC)和依赖注入(DI),要先理解这两个概念。可以通过阅读相关的资料、教程或者视频来学习。 3. Spring核心模块:了解Spring框架的核心模块,包括Spring Core、Spring Context和Spring Beans。这些模块提供了IoC容器、Bean管理和依赖注入等功能。 4. Spring AOP:学习Spring的面向切面编程(AOP)模块,掌握如何使用AOP实现日志记录、事务管理等功能。 5. Spring MVC:学习Spring MVC模块,了解如何构建基于MVC(Model-View-Controller)的Web应用程序。学习控制器、视图解析器、数据绑定等相关知识。 6. 数据访问:学习Spring框架提供的数据访问模块,包括Spring JDBC、Spring ORM和Spring Data等。了解如何与数据库进行交互和操作。 7. 整合其他技术:学习如何将Spring框架与其他技术进行整合,例如与Hibernate、MyBatis、Spring Boot等框架的整合。 8. 实践项目:通过实践项目来巩固所学的知识,可以选择一个简单的项目进行实践,逐步提升自己的技能。 此外,还可以参加一些相关的培训课程、线上教育平台或者加入开发者社区,与其他开发者交流和学习经验。不断实践和积累经验是提高技能的关键。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值