spring-1-基础ioc

image-20201128160014565

image-20201128145921825

EJB是Spring的前身。

image-20201128150124059

jdbc那个是编程式事务控制。如果有多个方法,很麻烦。

image-20201128150359895

image-20201128150625772

image-20201128150900561

image-20201128151234346

image-20201128151248200

image-20201128155816531

Spring环境配置步骤

<<dependency>
    <groupId>org.springframeworkgroupId>
    <artifactId>spring-contextartifactId>
    <version>5.0.5.RELEASEversion>
dependency>

创建配置文件:

image-20201128155934170

反射默认是通过无参构造创建对象的。

image-20201128160427507

image-20201128160446855

singleton 和 prototype 对象的创建时间不一样。

singleton: 当配置文件被加载时,bean对象就创建了。

prototype:当配置文件被加载时,bean对象没有被创建,只在getbean时创建。

image-20201128161141409

image-20201128161542282 image-20201128161622811
//静态方法实例化
getUserDao是静态方法
"userdao" class="com.ustc.dao.UserDaoFactory" factory-method="getUserDao">

//工厂实例方法

image-20201128162121293

image-20201128162145569

依赖注入

eg: userservice的save方法 ,通过ApplicationContext 获取userdao对象,并调用他的save方法。这种有什么弊端?

分析:userservice依赖的userdao还是从容器内部获取的。

image-20201128163245558

image-20201128163514615

image-20201128163634877

image-20201128163749313

set注入


 public static void main(String[] args) {
        ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
        UserService userService = (UserService) context.getBean("userService");
        userService.save();
    }

public class UserServiceImpl implements UserService {
    private UserDao mUserDao;

    public void setUserDao(UserDao userDao) {
        mUserDao = userDao;
    }

    public void save() {
        mUserDao.save();
    }
}

    
    "userService" class="com.ustc.service.UserServiceImpl">
        
        //name是set方法后面的,且第一个字母改为小写
    

set注入简便方式:p命名空间. 代替子标签property

image-20201128165632968

构造注入

标签

image-20201128172254608

其他类型注入

普通属性用value.

image-20201128172754335

集合注入

用property标签的子标签 list map

image-20201128173359004

image-20201128173339506

Properties注入 它键值都是字符串
image-20201128173456778

image-20201128173706672

image-20201128173728596

image-20201128173748286

image-20201128173920759

image-20201128174129450

image-20201128174548238

  • 容器中某一类型的bean只有1个时 ,可以用第二种,不用强转。

image-20201128174730923

image-20201128174741134

2.数据源

image-20201128174958749

导包

<<dependencies>
    <dependency>
        <groupId>mysqlgroupId>
        <artifactId>mysql-connector-javaartifactId>
        <version>8.0.19version>
    dependency>

    <dependency>
        <groupId>c3p0groupId>
        <artifactId>c3p0artifactId>
        <version>0.9.1.2version>
    dependency>

    <dependency>
        <groupId>com.alibabagroupId>
        <artifactId>druidartifactId>
        <version>1.1.18version>
    dependency>

    <dependency>
        <groupId>junitgroupId>
        <artifactId>junitartifactId>
        <version>4.12version>
        <scope>testscope>
    dependency>
dependencies>
//test c3p0数据源
@Test
public void test() throws Exception {
    ComboPooledDataSource dataSource = new ComboPooledDataSource();
    dataSource.setDriverClass("com.mysql.jdbc.Driver");
    dataSource.setJdbcUrl("jdbc:mysql://localhost:3306/ustc");
    dataSource.setUser("root");
    dataSource.setPassword("yyyyyyyy");
    Connection connection= dataSource.getConnection();
    System.out.println(connection);
    connection.close();
}
//test c3p0数据源
@Test
public void test2() throws Exception {
    DruidDataSource dataSource = new DruidDataSource();
    dataSource.setDriverClassName("com.mysql.jdbc.Driver");
    dataSource.setUrl("jdbc:mysql://localhost:3306/ustc");
    dataSource.setUsername("root");
    dataSource.setPassword("yyyyyyyy");
    Connection connection= dataSource.getConnection();
    System.out.println(connection);
    connection.close();
}

//数据库连接的字符串 要修改时,得改源码,和源码耦合,解耦,抽配置文件。

image-20201128185759941

Spring 配置数据源

及spring来产生第三方jar包中的类的对象。

要用spring来配置,得有spring的环境,如何配置?

导spring坐标.

image-20201128190618727

image-20201128190633099

xml中加载properties

引入命名空间

引入Properties

xml中使用properties SpEL表达式 ${}

image-20201128191401690


本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!