Spring2

Spring2,第1张

Spring2

目录
    • 一、IOC(控制反转)
    • 二、Spring Bean管理
      • 基于xml配置方式
      • Xml配置方式依赖注入[DI:Dependency Injection]
      • 注解方式实现
      • 注解与XML的对比
    • 三、Spring JDBC
    • 不使用AOP的开发方式

一、IOC(控制反转)

读作“反转控制”(Inverse of Control)更好理解,不是什么技术,而是一种设计思想,就是将原本在程序中手动创建对象的控制权,交由Spring框架来管理。

IOC容器是具有依赖注入功能的容器,负责对象的实例化,对象的初始化,对象和对象之间依赖关系配置、对象的销毁、对外提供对象的查找等 *** 作。对象的整个生命周期都是由容器来控制。我们需要使用的对象都由ioc容器进行管理,我们不需要手动去new的方式去创建对象,由ioc容器帮我们组装好,当我们需要使用的时候直接从ioc容器中直接获取就可以了。

正控:若要使用某个对象,需要自己去负责对象的创建。
反控:若要使用某个对象,只需要从spring容器中获取需要使用的对象,不关心对象的创建过程,也就是把创建对象的控制权反转给了Spring框架。

目的:降低耦合度
底层实现方式:解析xml /扫描注解标签 + 工厂模式 + 反射机制

二、Spring Bean管理 基于xml配置方式

配置类,spring对其管理
id:生成对象标识
class:类的地址
name:对象别名
scope:范围,作用域
singleton:单例的,整个应用程序只创建一次,多次获取同一个,在spring容器启动时创建
prototype:原型的(多例的) 每次获取时,都会创建一个新对象–>


Xml配置方式依赖注入[DI:Dependency Injection]

指Spring 创建对象的过程中,将对象依赖属性(简单值,集合,对象)通过配置设置给该对象。
实现IOC需要DI做支持
两种方法:
(1)构造方法
(2)set方法

eg:

  
    
    
        
        
    
  
    
        
        

    

测试:

        ApplicationContext app=new ClassPathXmlApplicationContext("spring.xml");
        User user = app.getBean("user", User.class);
         System.out.println(user);
        User user1 = app.getBean("user1", User.class);
        System.out.println(user1);


    
        
        
        
            
                1
                2
            
        
    

需要依赖注入

    
    
        
    

测试:
调用了set方法

  User user2 = app.getBean("user2", User.class);
        System.out.println(user2);


UserService

package com.ffyc.spring.service;

import com.ffyc.spring.dao.UserDao;

public class UserService {
    private UserDao userDao;

    public  void userService(){
        userDao.savedao();
    }

    public UserDao getUserDao() {
        return userDao;
    }

    public void setUserDao(UserDao userDao) {
        this.userDao = userDao;
        System.out.println("set方法被调用");
    }
}

User

package com.ffyc.spring.modle;

import java.util.List;

public class User {
    private String name;
    private Integer age;
    private List list;

    public User() {
        System.out.println("user无参构造");
    }

    public User(String name, Integer age) {
        this.name = name;
        this.age = age;
    }

    public List getList() {
        return list;
    }

    public void setList(List list) {
        this.list = list;
    }

    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;
    }

    @Override
    public String toString() {
        return "User{" +
                "name='" + name + ''' +
                ", age=" + age +
                ", list=" + list +
                '}';
    }
}

UserDao

package com.ffyc.spring.dao;

public class UserDao {
    public void savedao(){
        System.out.println("保存UserDao");
    }
}

注解方式实现

注解开发准备工作
注解需要的jar包,注解功能封装在AOP包,导入 Spring aop jar包即可


     
@Component(value = "user")  //注解创建对象
@Scope(value = "singleton单例") //生成对象的策略  singleton单例   prototype 原型
public class User {
    private String name;
    private Integer age;
    private List list;
}
@Repository(value = "userDao")  //注解创建对象
public class UserDao {
}

@Autowired 是spring自身提供的注释标签
@Resource(name = “userDao”) JDK自身提供注解标签 byName 和 byType 两种注入方式

@Service(value = "userService") //注解创建对象
public class UserService {
    
    @Autowired
    private UserDao userDao;

    public  void saveUser(){
        userDao.savedao();
    }

}

注解与XML的对比

注解
优点: 方便,直观,高效(代码少,没有配置文件的书写复杂)
缺点:以硬编码的方式写入到Java代码中,修改是需要重新编译代码的。
XML
优点:配置和代码是分离的,在xml中做修改,无需编译代码,只需重启服务器即可将新的配置加载。
缺点:编写麻烦,效率低。

三、Spring JDBC

Spring是一个一站式框架,自身也提供了控制层的SpringMVC 和持久层的Spring jdbcTemplate。
开发步骤
1、下载 Spring JdbcTemplate 的 jar 包



org.springframework
spring-jdbc
5.2.2.RELEASE



com.alibaba
druid
1.1.10

2、导入属性文件
config.properties

driver=com.mysql.cj.jdbc.Driver
url=jdbc:mysql://127.0.0.1:3306/mybatis_db?characterEncoding=utf8&useSSL=false&serverTimezone=Asia/Shanghai
uname=root
psword=123

在db.xml中读入config.properties文件

    
    

3、管理数据源对象
spring管理与数据库链接(数据源)

    
        
        
        
        
    

4、在配置文件中创建jdbcTemplate

    
    
        
    

在类中获得jdbcTemplate 对象,就可以直接使用

 @Autowired
     JdbcTemplate jdbcTemplate;

JdbcTemplate中常用的方法:
execute :无返回值,可执行ddl ,增删改语句
update :执行新增,修改,删除
queryForXXX:执行查询相关语句
eg:

package com.ffyc.spring.dao;

import com.ffyc.spring.modle.Admin;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.RowMapper;
import org.springframework.stereotype.Repository;

import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.List;
import java.util.Map;

@Repository(value = "userDao_back")
public class UserDao_back {

    @Autowired
     JdbcTemplate jdbcTemplate;

    public void savedao(){
        //System.out.println("保存save");
       // jdbcTemplate.update("insert into admin(account,password,sex)values (?,?,?)","122","222","男");
      //创建一个表
        //jdbcTemplate.execute("create table student(id int)");
        //查询
      
            //查询多个Rowmapper
       Admin admin= jdbcTemplate.queryForObject("select account,password from admin where id =?", new Object[]{1}, new
                RowMapper() {
                    @Override
                    public Admin mapRow(ResultSet resultSet, int i) throws SQLException {
                        Admin admin =new Admin();
                        admin.setAccount(resultSet.getString("account"));
                        admin.setPasswod(resultSet.getString("password"));
                        return admin;
                    }
                });
        System.out.println(admin);

        //不建议用 map 
        List> list=jdbcTemplate.queryForList("select * from employee");
        System.out.println(list);

    }
}

修改信息

创建一个student表

查询employee表有几条数据

查询admin表单个信息;查询employee表所有信息

不使用AOP的开发方式

先定义好接口与一个实现类,该实现类中除了要实现接口中的方法外,还要再写两个非业务方法。非业务方法也称为交叉业务逻辑:
doTransaction(): 用于事务处理
doLog() : 用于日志处理
然后再使接口方法调用他们。接口方法也称为主业务逻辑。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zaji/5596603.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-15
下一篇 2022-12-15

发表评论

登录后才能评论

评论列表(0条)

保存