0726学习笔记

0726

IDEA 工具
    分配更多的内存给IDEA,一般默认即可
        在加载大型项目时,可将内存调整到更高
        一般建议是物理内存的一半:
            -Xmx8192m
                表示IDEA工具最多可申请的内存空间

    查看源代码时,一定记得先下载,再查看    
        在源代码中 点击 右上角的“Download Source”
        下载到本地
        工具卡住的原因,是网络不稳定,在线查看加载慢/卡住了

    2022年10月1日,涨价


Spring Core 的功能
    创建对象,维护对象之间的关系


创建对象
    <bean id="" class="" />
    <bean id="" class="" factory-method=""/>


维护对象之间的关系
手工管理对象之间的关系
    Phone("ARM", "6G")  iPhone13p
        参数传入的时机,是在生成构造过程中
        phone = new Phone("ARM", "6G");

    Computer()          组装台式机
        参数传入的时机,可在对象创建后,使用set方法传入
        comp = new Computer();
        comp.setMainboard("技嘉");
        comp.setCpu("英特尔");
        comp.setRam("Kingston");

    Student()
        stu = new Student();
        stu.setName("张三");
        stu.setAge(23);
        stu.setPhone(phone);      // phone是引用变量(reference)
        stu.setComputer(comp);    // comp是引用变量(reference)


Spring管理对象之间的关系
    依赖注入概念
        将一起工作的具有关系的对象,
        通过 构造方法参数 或 方法参数 传入建立关联,
        容器的工作是 创建bean 时,注入这些依赖关系

        DI全称是Dependency Injection
        IOC是一种思想,DI是具体的实现手段

        DI注入的方式:构造器注入 和 Setter注入

    实战:注入基本值
        创建Module
            spring_demo_3_di
        创建com.jt.pojo
            Phone
            Computer
        配置application.xml
        测试

    实战:自动注入 autowire
    实战:注入引用值ref
        创建com.jt.pojo
            Student
        配置application.xml
        测试


    实战:注入基本值数据、引用对象、集合
        创建 com.jt.pojo.MessageBean
        配置 application.xml
        测试

    实战:构建全局集合,并注入测试
        配置application.xml
            注入全局集合
        测试

    实战:Spring表达式
        创建com.jt.pojo.ExpressionBean
        

    项目实战:创建DBCP数据源连接池
        pom.xml中添加坐标
            <dependency>
              <groupId>org.apache.commons</groupId>
              <artifactId>commons-dbcp2</artifactId>
              <version>2.6.0</version>
            </dependency>
            <dependency>
              <groupId>mysql</groupId>
              <artifactId>mysql-connector-java</artifactId>
              <version>5.1.37</version><!--  8.0.9-rc  -->
            </dependency>

        application-datasource.xml
            <util:properties id="" location="...">
                从 db.properties 文件中加载数据到Properties集合中
                纳入Spring容器管理

            <bean id="ds" class="数据源类型">
                <property ... value="#{...}"/>
            </bean>

        TestSpring3.java
            获取数据源对象
            通过数据源对象,获得连接对象
            面向接口编程
                在编写代码时,尽可能写接口
                DataSource ds = context.getBean(DataSource.class);
                    在Spring容器中,按照类型查找,相应的java bean
                    因为BasicDataSource是DataSource的子类/实现类
                    所以,可以正常获取该java bean,并使用。
                
                javax.sql.DataSource 是接口
                org.apache.commons.dbcp2.BasicDataSource 是实现类


对象属性 VS Bean属性
    对象属性,就是指对象中的成员变量
    Bean属性是指:
        和getXxx() 和 setXxx()相关的
        将get或set字符去除,Xxx首字母小写,得到的变量名,称作为bean属性名

    对象属性名 和 Bean属性名,通常都是一样的!

    EL表达式中,取的都是bean属性值
    ${product.title}   => "product"->p   p.getTitle()
    ${product.price}   => "product"->p   p.getPrice()

    public class Computer implements Serializable {
        // 对象的属性 mainboard cpu ram
        private String mainboard;  //主板
        private String cpu;
        private String ram;

        //Bean属性:MB、Mainboard
        public String getMB() {
            return mainboard;
        }

        public void setMB(String mainboard) {
            System.out.println("  set注入bean属性mainboard:" + mainboard);
            this.mainboard = mainboard;
        }

        public String getMainboard() {
            return mainboard;
        }

        public void setMainboard(String mainboard) {
            System.out.println("  set注入bean属性mainboard:" + mainboard);
            this.mainboard = mainboard;
        }
    }


创建新的module:spring_demo_4_mvc
    创建包:com.jt
    User
        id, name
        <bean id="" class="User">
            <property ...>
            <property ...>
        </bean>

    UserController(类比于servlet)
        private UserService;
        private User user;     //<-- 注入User信息,模拟页面传入的请求数据
        addUser(){
            userService.addUser(user);
        }

    UserService
    UserServiceImpl
        private UserDao;
        addUser(User user) {
            userDao.insert(user);
        }

    UserDao
    UserDaoImpl
        private DataSource;
        addUser(User user){
            Connection con = ...
            System.out.println("获得连接,插入数据成功!");
        }

    DataSource
        <bean id="" class="BasicDataSource">


    在 application.xml 配置文件中,创建对象,并设置对象之间的关系

自己笔记:

0726:
1、Spring为了使用注解简化开发,并没有提供构造函数注入、setter注入对应的注解,只提供了自动装
配的注解实现。
2、推导顺序  new对象 构造方法和set方法注入属性值-----》通过xml文件注入属性值----》通过注解的自动装配注入属性
3、ctrl+D 复制到下一行----ctrl+tab键  切换idea的页面---shift连按两下(所有你要查看的类)
4、依赖注入的底层原理 通过属性和属性名来判断这是什么注入,然后属性值有特殊的规定在通过还原成特定的样子,反射可以创建对象,也可得到相应的变量名,类型,方法名,构造函数等等,然后通过循环判断去找到对应需要注入的东西,通过反射注入进去
5、xmlns:声明我 需要使用的标签
xsi:对应工具标签的校验和查询
6、查看编译后的源码,需要反编译和反汇编  然后可以看到逻辑----如何想改变,就需要其他工具把要改的代码注入到线程中去(代码也只能是对应的二进制  需要一步步在翻译下来)
-----哔哩哔哩里面有
7、Spring配置中的bean直接引用其它bean的属性值来赋值给当前bean的属性,也可以直接调用其它bean的方法获取返回值来赋值给当前bean的属性,并且可以进行参数传递,这样可以省去在bean中注入需要获取属性值的bean。
8、编译看左边当你要使用哪些方法就要看左边的类型里面有没有,所有一般返回Object类型 都需要强转,不然在编译阶段,使用的方法(没强转)只能用Objec的方法
9、javabean就是实体类:用于封装数据
10、shift+f6  修改一个值就能改变其他地方相同变量的 值   (相同名字 修改一处 全部变)

总结:
创建Bean的三种方式
<!--创建Bean的三种方式 -->
    <!-- 第一种方式:使用默认构造函数创建。
            在spring的配置文件中使用bean标签,配以id和class属性之后,且没有其他属性和标签时。
            采用的就是默认构造函数创建bean对象,此时如果类中没有默认构造函数,则对象无法创建。
    <bean id="accountService" class="com.itheima.service.impl.AccountServiceImpl"></bean>
    -->
    <!-- 第二种方式: 使用普通工厂中的方法创建对象(使用某个类中的方法创建对象,并存入spring容器)
    <bean id="instanceFactory" class="com.itheima.factory.InstanceFactory"></bean>
    <bean id="accountService" factory-bean="instanceFactory" factory-method="getAccountService"></bean>
    -->
    <!-- 第三种方式:使用工厂中的静态方法创建对象(使用某个类中的静态方法创建对象,并存入spring容器)
    <bean id="accountService" class="com.itheima.factory.StaticFactory" factory-method="getAccountService"></bean>
    -->
使用注解的目的:简化xml配置
注解和xml配置的对应
@Configuration    代表xml配置文件  的整体框架
@ComponentScan     相当于组件扫描(需要扫描注解)
@Component        相当于<bean>标签 和  id属性和class属性
@Scope                 相当于scope的属性    
@Autoware (根据类型)           自动装配 引用类型(对象类型)  更具类型匹配  如果有冲突 就需要加 @Qualified(根据名称)
@Value  :注入普通类型属性
@Resource   :可以根据类型注入,可以根据名称注入
相当于autowire属性:byname ,bytype

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值