首页 > 其他分享 >SSM

SSM

时间:2023-03-18 12:45:15浏览次数:23  
标签:Spring void 代理 SSM bean 注解 public

SSM框架

SSM= Spring+SpringMVC+mybatis

SSH= Spring+struct2+Hibernate


Spring

  • 一个轻量级非入侵控制反转(IOC)面向切面(AOP)容器框架

  • 雏形是interface21框架

  • 框架创始人Rod Johnson的轮子理论:不要重复发明轮子

  • Spring理念:使现有的技术更加容易使用,本身是一个大杂烩,整合了现有的技术框架

  • Spring是一个开源的免费的框架 (容器

  • 支持事务的处理

Springboot

  • 一个快速开发的脚手架

  • 基于Springboot可以快速开发单个微服务

  • 约定大于配置

SpringCloud

  • 基于Springboot实现的

学习Springboot的前提:完全掌握Spring及SpringMVC

但是,由于发展太久,Spring配置十分繁琐(弊)


IOC(设计思想)

由主动的编程变成被动的接收,对象由Spring创建、管理、装配

传统开发:用户的需求会影响代码,因此程序员需要根据用户的需求去更改代码,修改代价昂贵

UserDao接口

UserDaoImpl实现类

UserService业务接口

UserServiceImpl业务实现类


IOC创建对象

默认使用无参创建对象

使用有参构造:

  1. 下标赋值:在XML中使用

    <bean id="user" class="com.yuanyu.pojo.User">
    	<constructor-arg index="0" value="XXXXXX"/>
    </bean>
    
  2. 使用类型赋值:(不建议使用)

    <bean id="user" class="com.yuanyu.pojo.User">
    	<constructor-arg type="java.lang.String" value="XXXXXX"/>
    </bean>
    
  3. 直接通过参数名来设置:

    <bean id="user" class="com.yuanyu.pojo.User">
    	<constructor-arg name="name" value="XXXXXX"/>
    </bean>
    

    在配置文件加载的时候,容器中管理的对象就已经初始化了


Spring配置

alias别名

若添加了别名,也可以使用别名来获取对象

<alias name="user" alias="userNew"/>

Bean的配置

id:bean的唯一标识符,相当于对象名
class:bean对象所对应的全限定名
name:别名,且name可以同时取多个别名
<bean id="user" class="com.yuanyu.pojo.User" name="u1,u2 u3;u4">
	<propery name="name" value="XXX"/>
</bean>

import

一般用于团队开发使用,可以将多个配置文件合并为一个(applicationContext.xml)

<import resource="beans.xml"/>

依赖注入

  1. 构造器注入
  2. set方式注入
  3. 扩展方式注入:使用P命名空间、C命名空间(需要导入XML约束)

Bean的作用域

  1. 单例模式(Spring默认机制)

    <bean id="user" class="com.yuanyu.pojo.User" c:age="17" c:name="yuanyu" scope="singleton"/>
    
  2. 原型模式:每次从容器中get的时候,都会产生一个新对象

    <bean id="user" class="com.yuanyu.pojo.User" scope="prototype"/>
    
  3. 其余的request、session、application只能在web开发中使用


Bean的自动装配

自动装配是Spring满足bean依赖的一种方式,Spring会在上下文中自动寻找,并自动给bean装配属性

  1. 在XML中显示配置

  2. 在java中显示配置

  3. 隐式的自动装配bean

    byName:会自动在容器上下文中查找,和自己对象set方法后面的值对应的beanid

    需要保证所有beanid唯一,并且这个bean需要和自动注入的属性的set值一致

    byType:会自动在容器上下文中查找,和自己对象属性类型相同的bean

    需要保证所有beanclass唯一,并且这个bean需要和自动注入的属性的类型一致

    <bean id="cat" class="com.yuanyu.pojo.Cat"/>
    <bean id="dog" class="com.yuanyu.pojo.Dog"/>
    <bean id="people" class="com.yuanyu.pojo.People" autowire="byName">
    	<property name="name" value="yuanyu"/>
    </bean>
    
  4. 使用注解实现自动装配

    在Spring4之后,要是用注解开发,必须保证aop的包导入了

    使用:

    • <context:annotation-config/>开启注解

    • @Autowired直接在类的属性上使用即可(使用后可以省略set方法);也可以在set方法上使用

      通过byType方式实现,而且必须要求对象存在

      • 如果显示定义了Autowired的require=false,说明这个对象可以为Null,否则不允许为空
      • 如果@Autowired自动装配的环境比较复杂,自动装配无法通过@Autowired一个注解完成时,可以使用@Qualifier(value="XXX")去配合@Autowired的使用,指定一个唯一的bean对象注入
    • @Resource默认通过byName方式实现,如果找不到名字,则通过byType实现 ,若两个都找不到则报错

    • @Nullable说明该字段可以为null

    • @Scope("prototype")

    • @Component衍生注解:在web开发中,会按照MVC三层架构分层

      • dao【@Repository】
      • service【@Service】
      • controller【@Conreoller】

      以上四个注解的功能都是一样的,都是代表将某个类注册到Spring中,装配Bean

    <?xml ...>
    <beans xmlns=
    	xmlns:xsi=
    	xmlns:context=
    	xsi:schemaLocation=...>
    	
    	指定要扫描的包,这个包下的注解就会生效
    	<context:component-scan base-package="com.yuanyu.pojo"/>
    	<context:annotation-config/>
    	
    </beans>	
    
    @Component
    public class User{
      	
      	public String name;
      	
      	@Value("yuanyu")
      	public void setName(String Name){
          this.name=name;
      	}
    }
    

XML与注解的最佳实践:注解只负责完成属性的注入,XML用来管理bean


使用java方式配置Spring

javaConfig是Spring的一个子项目,在Spring4之后变成了核心功能

在config文件夹下创建的Config类中加入@Configuration ;类中的方法前加入@Bean

在pojo文件下的User类中加入@Component 表示该类已被Spring接管,注册在了容器中


AOP

任何一个系统都是由不同的组件组成,每个组件负责一块特定的功能,会存在很多组件是跟业务无关的,例如:日志、事务、权限等核心服务组件作为一个切面,注入到目标对象中,不需要修改原有的业务逻辑代码,通过动态代理的方式,将需要注入切面的对象进行代理,降低了代码的耦合度。

静态代理

  • 抽象角色

  • 真实角色

  • 代理角色

  • 客户

优:

  • 使真实角色的操作更加纯粹,不用关注公共业务
  • 公共业务交给代理角色,实现了业务的分工
  • 公共业务发生扩展的时候,方便集中管理

缺:

  • 一个真实角色会产生一个代理角色,代码量会翻倍,开发效率变低

步骤:

  1. 接口

    //租房
    public interface Rent{
    
      	public void rent();
      	
    }
    
  2. 真实角色

    //房东
    public class Host implements Rent{
      
      	public void rent(){
          	System.out.println("房东要卖房子了");
      	}
    }
    
  3. 代理角色

    //中介
    public class Proxy implements Rent{
      
      	private Host host;
      	
      	public Proxy(){
          
      	}
      	public Proxy(Host host){
          this.host=host;
      	}
      	
      	public void rent(){
      	
      		host.rent();
         	seeHouse();
         	hetong();
         	fare();
      	}
      	
      	public void seeHouse(){
          System.out.println("中介带你看房");
      	}
      	
      	public void hetong(){
          System.out.println("签合同");
      	}
      	
      	public void fare(){
          System.out.println("收中介费");
      	}
    }
    
  4. 客户端访问代理角色

    public class Client{
      public static void main(String[] args){
        Host host=new Host();
        Proxy proxy=new Proxy(host);
        proxy.rent();
      }
    }
    

    动态代理

    动态代理的类是动态生成的,不是直接写的(实质:使用反射机制实现)

    优:

    • 使真实角色的操作更加纯粹,不用关注公共业务
    • 公共业务交给代理角色,实现了业务的分工
    • 公共业务发生扩展的时候,方便集中管理
    • 一个动态代理类代理的是一个接口,一般就是对应的一类业务
    • 一个动态代理类可以代理多个类,只要是实现了同一个接口即可

SpringMVC

MVC:模型(dao+service)+视图(JSP)+控制器(servlet)

一种架构模式:将业务逻辑、数据、显示分离的方法来组织代码;降低了视图与业务逻辑的双向耦合


Mybatis

Mybatis是一款优秀的持久层(内存中的数据断点易失,需要存起来)框架,支持定制化SQL、存储过程以及高级映射;避免了jdbc代码和手动设置参数以及获取结果集。可以使用简单的XML和注解来配置和映射原生类型,接口和pojo为数据库中的记录

优:

  • 本身小、简单易学
  • 灵活:,SQL写在XML里,便于统一管理和优化,解除SQL与程序代码的耦合

步骤:

  1. 导依赖pom.xml

    • mysql驱动
    • mybatis
    • Junit
    • 在build中配置resources
  2. 连接数据库

  3. 编写实体类

    public class User{
      private int id;
      private String name;
      private String pwd;
      
      set...get...
      
    }
    
  4. resources下编写核心配置文件mybatis-config.xml

    • 连接数据库
    • 注册mapper接口:每一个mapper.xml都需要在mybatis核心配置文件中注册
  5. 在mapper下编写接口UserMapper

    public interface UserMapper{
      public List<User> selectUser();
    }
    
  6. 在mapper下编写Mapper.xml

    <?...?>
    <!...>
    <mapper namespace="com.yuanyu.mapper.UserMapper">
    	<select id="selectUser" resultType="user">
    		select * from mybatis.user;
    	</select>
    </mapper>	
    
  7. 在test下测试

    public class MyTest{
      @Test
      public void test(){
        //获得sqlSession对象
        String resources="mybatis-config.xml";
        InputStream in=Resources.getResourceAsStream(resources);
        sqlSessionFactory sessionFactory=new SqlSessionFactoryBuilder().build(in);
        SqlSession sqlSession=sessionFactory.openSession(true);
        //执行sql
        sqlSession.getMapper(UserMapper.class);
        ...
      }
    }
    

标签:Spring,void,代理,SSM,bean,注解,public
From: https://www.cnblogs.com/yuanyu610/p/17229735.html

相关文章

  • SSM jsp众筹平台
    SSMjsp众筹平台系统功能首页登录注册图片轮播新闻公告众筹资讯网站公告众筹项目发起众筹 在线留言关于我们合作伙伴后台管理首页系统用户管理新闻数据管......
  • ssm整合pom文件
    <dependency><groupId>javax.servlet</groupId><artifactId>javax.servlet-api</artifactId><version>3.1.0</version><scope>provided</scope></dependency><!--js......
  • 计算机毕设项目 SSM大学生就业推荐管理系统
    (文章目录)1项目简介Hi,各位同学好呀,这里是M学姐!今天向大家分享一个今年(2022)最新完成的毕业设计项目作品,【基于SSM的大学生企业推荐系统】学姐根据实现的难度和等级......
  • 02-面试必会-SSM框架篇
    01-什么是SpringIOC和DI?IOC:控制翻转,它把传统上由程序代码直接操控的对象的调用权交给容器,通过容器来实现对象组件的装配和管理。所谓的“控制反转”概念就是对......
  • SSM框架--初印象
    背景简介:大四最后一年,学校要弄一个"8周实训",在这两个月里,来了位培训的老师,讲得挺好。【重点:学技术,可以去看视频或去培训老师那。】这两个月里面呢,按照学校的要求......
  • 关于在SSM项目中使用mybatis-plus时控制台出现was not registered for synchronizatio
    1.出现这个问题可能会出现事务不同步的问题导致无法进行数据库的连接。可以在service层中添加@Tranational注解2.这里我解决是添加配置文件log4j的配置文件查看是数据库连......
  • SSM SpringBoot vue药店管理系统
    SSMSpringBootvue药店管理系统登录首页普通管理员管理用户信息管理会员信息管理生产厂商管理类别信息管理药品信息管理进货管理销售信息管理联系我们管理系......
  • 计算机毕设项目 SSM大学生就业推荐系统
    (文章目录)1项目简介Hi,各位同学好呀,这里是M学姐!今天向大家分享一个今年(2022)最新完成的毕业设计项目作品,【基于SSM的大学生企业推荐系统】学姐根据实现的难度和等级......
  • ssm(黑马)
    springspring-01初识spring-02系统架构现在用的spring-03核心概念spring-04Ioc入门案例缺陷:new对象还是在代码中,解耦没有实现spring-05DI入门......
  • Python 内置函数装饰器 classmethod staticmethod
    使用官方的说法:classmethod(function)中文说明:classmethod是用来指定一个类的方法为类方法,没有此参数指定的类的方法为实例方法,使用方法如下:classC:@classmetho......