面试突击spring,看这一篇就够了,给你总结的清新脱俗!

Spring及IOC介绍

Spring简介

Rod Johnson,Spring Framework创始人,著名作者。很难想象Rod Johnson的学历,真的让好多人大吃一惊,他是悉尼大学的博士,然而他的专业不是计算机,而是音乐学。
Spring理念:使现有的技术更加容易使用,本身是一个大杂烩,整合了现有的技术框架!
SSH:Struct2 + Spring + Hibernate!
SSM:SpringMVC + Spring + Mybatis!
依赖导入:

 
        org.springframework
        spring-webmvc
        5.3.5
    

总结:Spring就是一个轻量级的控制反转(IOC)和面向切面编程(AOP)的框架


面试突击spring,看这一篇就够了,给你总结的清新脱俗!_第1张图片

缺点:“配置繁琐,配置地狱” 所以SpringBoot就出来了
IOC:以前程序主动权在程序员手中,用户需求得通过程序员修改,IOC就是改变这种手段,将控制权交到用户手中:控制反转。大大解除了程序的耦合性,这样程序员就可以更加专注于业务层开发

IOC创建及重点配置

新建Maven项目,导入依赖,编写实体类

@Data
public class Student {
    private String name;
    private int id;

编写xml文件






    
        
        
        
    





测试

public class myTest {
    @Test
    public void test(){
        ApplicationContext applicationContext = new ClassPathXmlApplicationContext("beans.xml");
        Student student = (Student) applicationContext.getBean("student");
        System.out.println(student.toString());
    }
}

思考:对象是如何创建的?
Spring自动创建对象,由Spring容器给对象属性赋值
这个过程就称为控制反转
控制:谁来控制对象的创建,传统应用程序的对象是由程序本身控制创建的,使用Spring后,对象是由Spring来创建的。
反转:程序本身不创建对象,变成被动的接受Spring容器创建的对象
容器通过set方法进行属性值的注入
对象由Spring来创建,管理,装配!

Spring重点配置!


   
       
   
   


依赖注入以及自动装Bean

当实体类出现复杂属性时如下:

@Data
public class Person {
    private String name;//名字
    private Cat cat;//宠物
    private String[] books;//书籍
    private List hobbies;//爱好
    private Map card;//卡
    private Set games;//游戏
    private String wife;//妻子
    private Properties info;//配置信息
    private Dog dog;
}

引用注入 cat


        
        

数组 books


        
            
                java核心技术
                jvm入门
                数据库入门到入土
                西游记
            
        

list、set集合 hobbies games


        
            
                
                
                rap
            
        

set时换一下关键字即可

map集合 card


        
            
                
                
            
        

null wife


        
            
        

properties info


           
               https//www.baidu.com
               https//www.baidu.com
           
       

自动装配Bean

缘由:当一个实体类中有其他类的引用属性时我们通常在xml中采用ref的方式指向另一个Bean,这种方式很繁琐,如下:

 
        
        
        
        
    
    
    

面试突击spring,看这一篇就够了,给你总结的清新脱俗!_第2张图片

而自动装配有主要两种方式:xml中autowire自动装配和注解自动装配


面试突击spring,看这一篇就够了,给你总结的清新脱俗!_第3张图片

xml
在bean标签中加入autowire标签即可

小结:

ByName的时候,需要保证所有bean的id唯一,并且这个bean需要和自动注入的属性的set方法的值一致!
ByType的时候,需要保证所有bean的class唯一,并且这个bean需要和自动注入的属性的类型一致!

使用注解实现自动装配
特别简单 导入注解约束——》配置注解的支持——》使用@Autowire注解
xml约束和注解支持:




使用注解

   @Value("吴亦凡")
    private String name;
    private String sex;
    @Autowired
    private Dog dog;
    @Autowired
    private Cat cat;

使用@Resource(java内置),用法和上面一样,

区别:@Autowired优先byType,@Resource优先byName然后byType

使用注解开发(improtant)

1、导入AOP包和约束
aop包在导入Springwebmvc时候就一起导入进来了



    //扫描包下的注解
    
    


面试突击spring,看这一篇就够了,给你总结的清新脱俗!_第4张图片

AOP

Aop:Aspect Oriented Programming的缩写,意思是面向切面编程,动态的在程序运行期间找个切点将一段程序执行插入进去,实现了在不改动源程序的基础下增加功能;
优点:有了 AOP,我们可以定义交叉的关系,并将这些关系应用于跨模块的、彼此不同的对象模型。AOP 同时还可以让我们层次化功能性而不是嵌入功能性,从而使得代码有更好的可读性和易于维护。它会和面向对象编程合作得很好。


面试突击spring,看这一篇就够了,给你总结的清新脱俗!_第5张图片

Spring中的Aop:


面试突击spring,看这一篇就够了,给你总结的清新脱俗!_第6张图片

第一种方式:spring中Api接口实现AOP:

接口方法:


面试突击spring,看这一篇就够了,给你总结的清新脱俗!_第7张图片

1、导入aspectjweaver依赖

        
            org.aspectj
            aspectjweaver
            1.9.6
        

2、编写接口和实现类

public interface BookDao {
    //增删查改
    public void addBook();
    public void deleteBook();
    public void selectBook();
    public void updateBook();
}

public class BookDaoImpl implements BookDao {
    public void addBook() {
        System.out.println("增加了一本书");
    }

    public void deleteBook() {
        System.out.println("删除了一本书");
    }

    public void selectBook() {
        System.out.println("查找了一本书");
    }

    public void updateBook() {
        System.out.println("更新了一本书");
    }
}

要向切口插入的功能

public class Log implements MethodBeforeAdvice {
    //method: 要执行的目标对象的方法
    //args:参数
    //target:目标对象
    public void before(Method method, Object[] objects, Object o) throws Throwable {
        System.out.println(o.getClass().getName()+"的"+method.getName()+"方法执行了");
    }
}

3、编写xml文件



    

    
    

    

        

        
    


4、测试:

    public static void main(String[] args) {
           ApplicationContext context = new ClassPathXmlApplicationContext("bean.xml");
           //代理类代理的是一个接口而不是实现类
        BookDao bookDaoImpl = (BookDao) context.getBean("bookDaoImpl");
        bookDaoImpl.addBook();
    }

结果:


面试突击spring,看这一篇就够了,给你总结的清新脱俗!_第8张图片

第二种方式:自定义切面类

1、自定义通知类

//自定义通知方法
public class Aspect {
    public void before(){
        System.out.println("方法执行前");
    }
    public void after(){
        System.out.println("方法执行后");
    }
}


2、xml


    
        

        
        
    


3、测试


面试突击spring,看这一篇就够了,给你总结的清新脱俗!_第9张图片

第三种方式:注解方式!

很简单;标志切面类–》标志通知–》配置xml开启注解支持

@Aspect
public class AspectAnoation {
    @Before("execution(* com.song.service.BookDaoImpl.*(..))")
    public void before(){
        System.out.println("方法执行前");
    }
    @After("execution(* com.song.service.BookDaoImpl.*(..))")
    public void after(){
        System.out.println("方法执行后");
    }
}

    

    

整合Mybatis

mybatis简单复习

面试突击spring,看这一篇就够了,给你总结的清新脱俗!_第10张图片

总配置文件——>编写实体类——>编写接口——>编写接口对应xml文件——>测试
1、导入所有依赖:
junit
mybatis
mysql数据库
spring相关
aop织入器
mybatis-spring整合包【重点】在此还导入了lombok包。
配置Maven静态资源过滤问题!



    
        
        
            org.mybatis
            mybatis
            3.5.6
        
        
            mysql
            mysql-connector-java
            8.0.24
        
        
        
            org.springframework
            spring-jdbc
            5.3.5
        
        
        
            org.aspectj
            aspectjweaver
            1.9.6
        
        
        
            org.mybatis
            mybatis-spring
            2.0.6
        


    
    
        
        
            src/main/java
            
                **/*.properties
                **/*.xml
            
            true
        
        
    


2、实体类

@Data
public class User {
    private int userId;
    private String userName;
    private String password;
    private String sex;
    private String email;
}

3、接口及对应的配置文件

public interface UserMapper {
    List getUser();
}





    


4、mybatisconfig配置文件




    
        
    
    
        
            
            
                
                
                
                
            
        
    
    
        
    



5、工具包:

public class MybatisUtil {
    //sqlSessionFactory --> sqlSession

        static SqlSessionFactory sqlSessionFactory = null;

        static {
            try {
                //使用Mybatis第一步 :获取sqlSessionFactory对象
                String resource = "mybatisConfig.xml";
                InputStream inputStream = Resources.getResourceAsStream(resource);
                sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
            } catch (IOException e) {
                e.printStackTrace();
            }
        }

        //既然有了 SqlSessionFactory,顾名思义,我们可以从中获得 SqlSession 的实例.
        // SqlSession 提供了在数据库执行 SQL 命令所需的所有方法。
        public static SqlSession getSqlSession(){
            return sqlSessionFactory.openSession();
        }
    }


6、测试:

   @Test
    public void test(){
        SqlSession sqlSession = MybatisUtil.getSqlSession();
        UserMapper mapper = sqlSession.getMapper(UserMapper.class);
        mapper.getUser();
    }

整合方式一

鸟瞰图:Spring-Mybatis


面试突击spring,看这一篇就够了,给你总结的清新脱俗!_第11张图片

以下为过程对应代码




    
        
        
        
        
    

    
        
        
        
    

    
        
    

    
        
    


实现类:

//创建实现类配合bean
public class UserMapperImpl implements UserMapper {
    //sqlsession
    private SqlSessionTemplate sqlSessionTemplate;
    //set方法用来注入
    public void setSqlSessionTemplate(SqlSessionTemplate sqlSessionTemplate) {
        this.sqlSessionTemplate = sqlSessionTemplate;
    }

整合方式三:

和方式二前四步一样,第五步不再创建私有方法而是继承一个类,调用类方法得到sqlSession,道理还是一样
实现类:

public class UserMapperImpl2 extends SqlSessionDaoSupport implements UserMapper {
    public List getUser() {
        return getSqlSession().getMapper(UserMapper.class).getUser();
    }
}

bean:

    
        
    

最后

在文章的最后作者为大家整理了很多资料!包括java核心知识点+全套架构师学习资料和视频+一线大厂面试宝典+面试简历模板+阿里美团网易腾讯小米爱奇艺快手哔哩哔哩面试题+Spring源码合集+Java架构实战电子书等等!

欢迎关注公众号:前程有光,领取!

你可能感兴趣的:(面试突击spring,看这一篇就够了,给你总结的清新脱俗!)