7-30Spring-day1

1.课程介绍
1. 依赖注入;(掌握)
2. XML自动注入;(了解)
3. 全注解配置;(掌握)
4. 代理模式;(掌握,超难)
5. AOP;(掌握)
6. Bean的创建方式(掌握)

一,依赖注入

什么是依赖注入
一个类里面依赖于另一个类,然后spring把类的对象创建出来,然后注入到相应的类里面去

依赖注入的方式:
set方法注入
构造器方法注入
注解式方法注入

!-- 构造器注入 index索引注入方式-->
        <!--<constructor-arg index="0" value="5"></constructor-arg>
        <constructor-arg index="1" value="小王"></constructor-arg>-->
        <!-- 构造器注入 通过name注入-->
        <!-- <constructor-arg name="id" value="1"></constructor-arg>
         <constructor-arg name="name" value="老王"></constructor-arg>-->
        <!--构造器注入 通过type类型注入-->
        <!--
         <constructor-arg type="java.lang.Long" value="1"></constructor-arg>
         <constructor-arg type="java.lang.Long" value="18"></constructor-arg>
         <constructor-arg type="java.lang.String" value="剑锋"></constructor-arg>-->

        <!--类里面有一个属性是对象 怎么注入 -->
        <constructor-arg name="id" value="1"></constructor-arg>
        <constructor-arg name="name" value="yyy"></constructor-arg>
        <constructor-arg name="age" value="18"></constructor-arg>
        <!-- <constructor-arg name="hb" ref="hb"></constructor-arg>-->
        <constructor-arg name="hb">
            <bean class="cn.itsource._01_di.HelloBean"></bean>
        </constructor-arg>

数组两种方式
简写:

 <!--<property name="arrays" value="1,2,3"></property>-->

完整写法:

<property name="arrays">
            <array>
                <value>币</value>
                <value>钱</value>
                <value>命</value>
            </array>
        </property>

二,XML自动注入

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"
       default-autowire="byType">
    <bean id="userDao" class="cn.itsource._02_xmlauto.UserDao"></bean>
    <bean id="userService" class="cn.itsource._02_xmlauto.UserService"></bean>
    <bean id="userServicex" class="cn.itsource._02_xmlauto.UserService"></bean>
    <bean id="userController" class="cn.itsource._02_xmlauto.UserController" autowire="byName">
    </bean>
</beans>

三,全注解配置
配置让Spring扫描类与支持注解

<!-- 开启扫描 controller service repository component-->
    <context:component-scan base-package="cn.itsource._03_anno"/>

配置dao层进行注解

Repository("jpaDao")
public class UserJpaDao implements IUserDao{

    public void save() {
        System.out.println("jpa保存数据");
    }
}

配置service层进行注解

@Service
public class UserService implements IUserService {
    @Resource(name = "jpaDao")
    private IUserDao userDao;
    public void save() {
        userDao.save();
    }
}

配置controller层进行注解

@Controller
@Scope("prototype")
public class UserController {
    @Autowired
    private IUserService userService;
    public void save(){userService.save();}
}

四,AOP面向切面
AOP
它是spring一个特性,面向切面的编程
什么叫面向切面的编程:
它的产生并不是取代面型对象,而是扩展,把类切开(切到方法上面)
可以往方法前后添加一些逻辑
什么叫面向对象编程
万事万物皆对象,使用对象思维操作编程。
Aop使用场景:
事务管理
日志管理
性能监控
拦截器
Aop实现
底层是通过代理模式实现–代理模式jdk/cglib动态代理

public class TxManager {
    public void begin(){
        System.out.println("事物开启");
    }
    public void commit(){
        System.out.println("事物提交");
    }
    public void rollback(Throwable e){
        System.out.println("事物回滚"+e.getMessage());
    }
    public void close(){
        System.out.println("事物关闭");
    }


    //环绕通知
    @Around("pointcu()")
    public void around(ProceedingJoinPoint joinPoint){
        String methodName = joinPoint.getSignature().getName();
        try {

            if("find".equals(methodName) || "query".equals(methodName)){
                //去执行方法 save
                joinPoint.proceed();
            }else {
                //事物开启
                begin();
                System.out.println(joinPoint.getSignature().getName());
                //去执行方法 save
                joinPoint.proceed();
                //事物提交
                commit();
            }
        } catch (Throwable e) {
            e.printStackTrace();
            //报错就回滚
            rollback(e);
        }finally {
            if("find".equals(methodName) || "query".equals(methodName)) {

            }else{
                close();
            }
        }
    }

五,代理模式
了解能理解多深就多深
代理模式
静态代理:如果对多个接口或者多个方法,写很多额外的代理实现
动态代理
实现了解
动态代理 jdk(有接口) cglib(没有接口代理)

1. 添加logback-spring.xml文件 在src/main/resources目录下创建一个名为logback-spring.xml的文件,将下面的代码复制并粘贴进去。 ``` <?xml version="1.0" encoding="utf-8" ?> <configuration> <!-- 确定打印的日志级别 --> <timestamp key="byDay" datePattern="yyyyMMdd" /> <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender"> <encoder> <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{35} -%msg%n</pattern> </encoder> </appender> <!-- 输出到本地文件 --> <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"> <file>${LOG_PATH}/springboot2.log</file> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <fileNamePattern>${LOG_PATH}/springboot2.%d{yyyy-MM-dd}.log</fileNamePattern> <maxHistory>30</maxHistory> </rollingPolicy> <encoder> <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{35} -%msg%n</pattern> </encoder> </appender> <!-- root级别日志处理器 --> <root level="info"> <appender-ref ref="CONSOLE" /> <appender-ref ref="FILE" /> </root> <!-- 配置包日级别日志处理器 --> <logger name="com.example" level="debug" additivity="false"> <appender-ref ref="CONSOLE" /> <appender-ref ref="FILE" /> </logger> </configuration> ``` 2. 配置文件参数 在application.properties或application.yml文件中添加以下参数: - logging.config:指定logback-spring.xml配置文件路径,如果不指定将使用默认的日志配置。 - logging.path:指定日志文件存放路径,必须是一个相对目录。例如:logging.path=log 相当于在项目根目录下创建了一个log文件夹,日志将输出到该文件夹中。如果没有设置该参数,则日志将输出到控制台。 ``` #以配置文件的方式加载日志框架,默认使用logback-spring.xml作为配置文件 logging.config=classpath:logback-spring.xml #指定日志存放的相对路径 logging.path=log ``` 3. 在代码中使用日志输出 在需要输出日志的类中使用注入方式加载日志,在方法中使用对应的日志级别输出日志。 ``` @Component public class TestController { private static final Logger logger = LoggerFactory.getLogger(TestController.class); @RequestMapping("/test") public String test() { logger.debug("这是一条debug日志"); logger.info("这是一条info日志"); logger.warn("这是一条warn日志"); logger.error("这是一条error日志"); return "test"; } } ``` 运行项目,打开控制台或者查看日志文件,可以看到日志已经输出成功。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值