栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Spring框架

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Spring框架

1.Spring定义

轻量级框架, Java EE的春天,当前主流框架

什么是spring?(面试题)

Spring是一个开源的轻量级的java开发框架。是一种简化应用程序的开发。

在spring出来之前,service层调用dao层都是用new的方式。
在Spring出来之后,service层和dao层都会放在spring容器去管理,
这是spring的第一种特性,我们称之为IOC,控制反转。

Spring还有一种特性, 我们称之为AOP,大白话,“面向切面”,
说白了就是专门的人干专门的事。
在项目很多公有的或是要被重复被调用的模块可以被抽取出来,
利用的就是AOP的特性,例如日志模块。

2.Spring特性

(1)IOC (控制反转,DI:依赖注入)
DI 是 IOC 的具体实现
IOC框架使用依赖注入作为实现控制反转的方式

(2)AOP实现 (面向切面编程)

面试题:spring –IOC,DI体系整理
IOC是一种思想 不负责具体实现 是通过DI依赖注入来实现的
其中又包括各种注入如set注入(属性注入,常见)==》
包括对象、引用类型、属性和属性值等,
还有构造器注入(了解)、注解注入(常见)、
静态工厂注入,动态工厂注入、方法参数注入等等
注入的时候可以采用手工注入 ref(引入),
也可以使用自动注入(非ref)包括byName和byType。

3.Spring组成部分

Spring中的核心思想是什么?(面试题)
在Spring中万物都是Bean组件
(面向Bean编程)(替代new的)

4.Spring理念

面向Bean的编程

5.Spring优势(面试题)

  1. 低侵入式设计
  2. 独立于各种应用服务器
  3. 依赖注入特性将组件关系透明化,降低了耦合度
  4. 面向切面编程特性允许将通用任务进行集中式处理
  5. 与第三方框架的良好整合

6.IOC特性

A.非IOC思想
(1)创建maven工程,java,resources,test,并配置路径参数

(2)UserService.java

public interface UserService { void add(); }

(3)UserServiceImpl

public class UserServiceImpl implements UserService {

    @Override
    public void add() { System.out.println("hello world..."); }
}

(4)TestUserServiceImpl.java

import cn.kgc.service.UserServiceImpl;
import org.junit.Test;

public class TestUserServiceImpl {
    @Test
    public void testAdd(){  new UserServiceImpl().add();  }
}

B.IOC思想

好处: 少用new 因为要开辟空间

1 2 3 步与前面一致 导入依赖

(4)pom.xml


  org.springframework
  spring-context
  5.3.5

1

(5)spring配置文件applicationContext.xml

NEW – XML Configuration File – Spring Config






    


(6) TestUserServiceImpl.java 

@Test
public void testAdd(){
    //调用启动器  后面放配置文件
    //创建Spring容器对象(ClassPathXmlApplicationContext:加载配置文件)
    ClassPathXmlApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml");
    //从容器中获取对象         获取Bean    里面写id  并且需要强转
    UserService userService = (UserService) ac.getBean("userService");
    userService.add();
}

7.DI注入(IOC的实现)

注入: 主要的是 set注入和注解注入。

(1)set注入

1.1-属性赋值

A.实体类User.java

1.1-属性赋值

A.实体类User.java

public class User   {
    private Integer id;
    private String name;
//  省略getter和setter方法
}

B.applicationContext.xml(省略部分)


        
---->相当于启用命令调用setId()方法
        
---->相当于启用命令调用setName()方法

C. TestUserServiceImpl
 

@Test
public void testUser(){
        ClassPathXmlApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml");
        User user = (User) ac.getBean("user");
        System.out.println("编码: " + user.getId() + "t" + "名称:" + user.getName());
}

1.2引用类型手工注入(ref方式)

附注:

 A.User

public class User {
    private Integer id;
    private String name;
    private Role role;
//省略getter和setter
}

B.Role

public class Role {
    private Integer rid;
    private String rName;
//省略getter和setter
}


C.applicationContext.xml (省略部分)

  

    
        
        
        
       

    
        
        
    


D.Test01.java

 

@Test
    public void test1(){
        ClassPathXmlApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml");
        User user = (User) ac.getBean("user");
        System.out.println("id:" + user.getId() + " role:" +user.getRole().getrName());
    }

结果:

=> id:12 role:教授

注意点:

ref 写太多 很繁琐 也要细心 所以需要自动注入
1.3 引用类型自动注入

xml中可以在bean元素中通过autowire属性来设置自动注入的方式:

byteName:按照名称进行注入
byType:按类型进行注入
constructor:按照构造方法进行注入
default:默认注入方式
详细说明:
spring容器会按照set属性的名称去容器中查找同名的bean对象,
然后将查找到的对象通过set方法注入到对应的bean中,
未找到对应名称的bean对象则set方法不进行注入

注意: 需要注入的set属性的名称和被注入的bean的名称必须一致。

(1)byName

byName(按名称注入):

java类中引用类型的属性名和spring容器中(配置文件)的id名称一样,
且数据类型是一致的,这样的容器中的bean,spring能够赋值给引用类型。

A.User 省略

B.Role 省略

C.applicationContext.xml (省略部分)

 

  
        
        
    

    
        
        
    


D. TestSpring001 省略

结果:

=>id:12 role:教授

(2)byType

byType(按类型注入):
java类中引用类型的数据类型和spring容器中(配置文件)的class属性
是同源关系的,这样的bean能够赋值给引用类型

同源就是一类型的意思

三种同源:
第一种同源.java引用类型的数据类型和bean的class的值是一样的

第二种同源.java引用类型的数据类型和bean的class的值是父子类间的关系

第三种同源.java引用类型的数据类型和bean的class的值是接口和实现类的关系(常用)

第一种同源(一致性)

A.User(省略)

B.Role(省略)

C.applicationContext.xml (省略部分)

 

  
      
        
        
    

    
        
        
    


D. testEntity.java

@Test
public void demo01(){
        ClassPathXmlApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml");
        User user = (User) ac.getBean("user");
        System.out.println("id:" + user.getId() + " role:" +user.getRole().getrName());
    }


结果:

id:13 role:老师

第二种同源(父子类)

A.User(省略)

B.Role(省略)

C.SonRole

public class SonRole extends Role{ }


D. applicationContext.xml (省略部分)


        
        
    
    
        
        


 
E. testSpring.class

 @Test
    public void test001(){
        ClassPathXmlApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml");
        User user = (User) ac.getBean("user");
        System.out.println("id:" + user.getId() + " role:" +user.getRole().getrName());
}


结果:

id:1234 role:金融专家

第三种同源(接口和实现类) (常用)

1.mapper/UserMapper.java

public interface UserMapper { public void add(); }


2.mapper/UserMapperImpl.java

public class UserMapperImpl implements UserMapper {
    @Override
    public void add() {
        System.out.println("持久层UserMapper的add方法。。。。");
    }
}


3.service/UserService.java

public interface UserService { public void add(); }


4.service/UserServiceImpl

public class UserServiceImpl implements UserService {
    private UserMapper userMapper;

    @Override
    public void add() { userMapper.add(); }

    public UserMapper getUserMapper() {  return userMapper; }

    public void setUserMapper(UserMapper userMapper) { this.userMapper = userMapper; }
}



5.applicationContext.xml (省略部分)


    


6.TestUserServiceImpl.java

@Test
    public void demo01(){
        ClassPathXmlApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml");
        UserService userService = (UserService) ac.getBean("userService");
        userService.add();
    }
}



结果:

 持久层UserMapper的add方法。。。。

拓展(第三种同源换成byName方式实现)

applicationContext.xml (省略部分) 


        
    

    
    



题外话:
 

MVC框架模式
Model View(jsp) Controller 模型-视图-控制器

SpringMVC框架
该框架是基于Java的实现了
MVC框架模式的请求驱动类型的轻量级框架。

MVC 和 SpringMVC不是一样的
SpringMVC是根据spring的

java三者区别
JAVA SE 个人版java 无 WEB端
JAVA ME 客户应用端(已淘汰) –》电脑游戏
JAVA EE web端 JAVA(企业级JAVA)

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/642798.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号