第三周的学习内容

本文介绍了Spring框架的搭建步骤,包括创建Maven项目、引入核心库和配置文件。详细阐述了后端代码的三层结构:Controller、Service和DAO层。讨论了if判断与三目运算符的使用场景。接着讲解了代理模式的概念和在静态与动态代理中的优缺点。此外,还深入探讨了Spring AOP的面向切面编程思想。最后,详述了Spring中的IOC(控制反转)和DI(依赖注入)原理,通过 Setter 注入、构造方法注入、自动注入和注解注入四种方式展示了DI的实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、Spring工程搭建
1.创建Maven项目
2.引入spring-core、spring-beans、spring-context、spring-expression四个Spring基础包
3.创建applicationContext.xml配置文件
4.新建类,并且实现类,再测试类

二、常用后端代码结构
这个指的是Controller+Service+Dao
Controller层(流程控制层)主要负责具体的业务模块流程的控制
Service层(业务逻辑层)主要负责业务模块的逻辑应用设计
DAO层(数据操作层)主要负责与数据库进行联络的一些任务

三、if判断和三目运算符
if条件语句是代码中常用的判断条件的代码,相对于其他的条件判断语句更为简单,一般代码结构如下:

if (判别式) {
    代码块1
} else {
    代码块2
}

三目运算符比if更简单,但一般在if语句中代码块只有一行语句的情况下会替代if使用

判别式 ? 代码块1 : 代码块2;

二者都是判别式结果为真,会执行代码块1,若为假执行代码块2

四、代理模式
代理模式是指给某一个对象提供一个代理对象,并由代理对象控制对原对象的引用,分为动态代理和静态代理
静态代理的优点是可以在符合开闭原则的情况下对目标对象进行功能扩展,缺点是工作量大
动态代理工作量小,但不方便

五、SpringAOP
AOP指的是面向切面编程,在不修改源代码的情况下给程序动态统一添加功能

六:IOC和DI
IOC(Inversion of Control 控制反转)是面向对象编程中的一种设计模式
其最常见的方式叫做DI(Dependency Injection 依赖注入)
DI的四种方法

1.Setter方法注入
(1)定义JavaBean

package com.test.bean;

import java.util.*;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

//Lombok@Data注解提供了Setter方法
@Data
@AllArgsConstructor
@NoArgsConstructor
public class User {
    private Integer             id;
    private String              password;
    private String              sex;
    private Integer             age;
    private Date                bornDate;
    private String[]            hobbys;
    private Set<String>         phones;
    private List<String>        names;
    private Map<String, String> countries;
    private Properties          files;
}

(2)注入各种数据类型

<bean id="User" class="com.test.bean.User">
    <!--注入基本数据类型-->
    <property name="id" value="1"/>
    <property name="password" value="123456789"/>
    <property name="sex" value="male"/>
    <property name="age" value="24"/>
    <!--注入日期类型-->
    <property name="bornDate" value="1997/11/4"/>
    <!--注入数组类型-->
    <property name="hobbys">
        <array>
            <value>Run</value>
            <value>Jump</value>
            <value>Climb</value>
        </array>
    </property>
    <!--注入List集合类型-->
    <property name="names">
        <list>
            <value>Ziph</value>
            <value>Join</value>
            <value>Marry</value>
        </list>
    </property>
    <!--注入Set集合类型-->
    <property name="phones">
        <set>
            <value>110</value>
            <value>119</value>
            <value>120</value>
        </set>
    </property>
    <!--注入Properties类型-->
    <property name="files">
        <props>
            <prop key="first">One</prop>
            <prop key="second">Two</prop>
            <prop key="third">Three</prop>
        </props>
    </property>
    <!--注入Map集合类型-->
    <property name="countries">
        <map>
            <entry key="China" value="中国"/>
            <entry key="USA" value="美国"/>
            <entry key="UK" value="英国"/>
        </map>
    </property>
</bean>

(3)注入自建类型数据

<bean id="UserDao" class="com.test.dao.impl.UserDaoImpl"/>
<bean id="UserService" class="com.test.service.impl.UserServiceImpl">
    <property name="userDao" ref="UserDao"/>
</bean>
<!--次要bean,被作为属性-->
<bean id="address" class="com.test.bean.Address">
    <property name="position" value="北极" />
    <property name="zipCode" value="000000" />
</bean>

<!--主要bean,操作的主体-->
<bean id="user" class="com.test.bean.User">
    <!--address属性引用address对象-->
    <property name="address" ref="address" />
</bean>

2.构造方法注入
(1)定义JavaBean

public class Student {
    private Integer id;
    private String name;
    private String sex;
    private Integer age;

    //Constructors
      public Student(Integer id , String name , String sex , Integer age){
          this.id = id;
        this.name = name;
          this.sex = sex;
        this.age = age;
    }
}

(2)构造方法注入

 <!--构造注入-->
<bean id="u3" class="com.test.bean.Student">
    <!-- 除标签名称有变化,其他均和Set注入一致 -->
    <constructor-arg name="id" value="123" /> 
    <constructor-arg name="name" value="who" />
    <constructor-arg name="age" value="24" />
    <constructor-arg name="sex" value="male" />
</bean>

3.自动注入
(1) 注入场景

package com.test.service.impl;

import com.test.bean.User;
import com.test.dao.UserDao;
import com.test.service.UserService;

public class UserServiceImpl implements UserService {
    private UserDao userDao;

    public void setUserDao(UserDao userDao) {
        this.userDao = userDao;
    }

    @Override
    public int insertUser(User user) {
        System.out.println("------insertUser and UserService------");
        return userDao.insertUser(null);
    }
}

(2)自动注入的两种方法

<bean id="UserDao" class="com.test.dao.impl.UserDaoImpl"/>
    <!--为UserServiceImpl中的属性基于名称自动注入值-->
    <bean id="userService" class="com.test.service.impl.userServiceImpl" autowire="byName"/>
</beans>
<bean id="userDao" class="com.test.dao.UserDaoImpl" />
    <!--为UserServiceImpl中的属性基于类型自动注入值-->
    <bean id="userService" class="com.test.service.impl.UserServiceImpl" autowire="byType"/>
</beans>

4.注解自动注入

@Service
public class UserServiceImpl implements UserService {   
    @Autowired //注入类型为UserDao的bean
    @Qualifier("userDao") //如果有多个类型为UserDao的bean,可以用此注解从中指定一个
    private UserDao userDao;
}
@Service
public class UserServiceImpl implements UserService {   
    @Resource("userDao") //注入id=“userDao”的bean
    private UserDao userDao;
}
public class User{
    @Value("1")    //注入数字
    private Integer id;
    @Value("Ziph") //注入String
    private String name;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值