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

Spring IOC Spring注解开发 Spring中的单例和多例 常用注解

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

Spring IOC Spring注解开发 Spring中的单例和多例 常用注解

文章目录

***2022.01.22 第三阶段 day 02*** Spring

介绍 Spring核心-IOC☆

IOC介绍IOC实现原理 Spring注解开发

关于注解开发说明编辑配置类编辑测试类 Spring中的单例和多例

概念说明 Spring中的懒加载 第三阶段常用注解

2022.01.22 第三阶段 day 02 Spring 介绍

Spring框架是一个开放源代码的J2EE应用程序框架,由Rod Johnson发起,是针对bean的生命周期进行管理的轻量级容器(lightweight container)。

知识点:

J2SE 基础的java语法

J2EE JAVA企业级开发

J2ME 移动端java开发 (手机QQ java写的)

bean 由Spring容器管理的对象称之为bean

轻量级 使用spring容器的方式简单/操作便捷

容器 Spring在内存中开辟了一大块空间,用来管理对象

一.传统项目开发

创建Dog类 创建Cat类

package com.jt.demo1;
public class Dog {
    public void hello(){
        System.out.println("小狗 不咬人!!!");
    }
}
package com.jt.demo1;
public class Dog {
    public void hello(){
        System.out.println("小狗 不咬人!!!");
    }
}

编辑测试类

package com.jt.demo1;
public class User {
    
    //用户需要调用hello方法
    private static Cat cat = new Cat();
    public static void main(String[] args) {
        System.out.println("用户调用方法");
        cat.hello();
    }
}

测试问题总结:

    如果类中的属性通过new 的方式直接绑定. 则类与属性的耦合性高.如果需要修改属性类型, 则需要修改代码. 后期扩展不方便.

二.面向接口开发▪♢

定义接口

package com.jt.demo2;
public interface Pet {
    //接口的作用? 抽取一些公共的方法!!!
    void hello();
}

定义宠物实现类 定义狗 定义猫

package com.jt.demo2;
public class Dog implements Pet{
    @Override
    public void hello() {
        System.out.println("小狗汪汪汪!!!");
    }
}
package com.jt.demo2;
public class Cat implements Pet{
    @Override
    public void hello() {
        System.out.println("小猫 喵喵!!!");
    }
}

定义用户类

package com.jt.demo2;
public class User {
    //1.用户可以使用接口当做属性
    //2.面向接口开发! 以后方法的属性名称不用修改
    private static Pet pet = new Dog();//多态!!
    public static void main(String[] args) {
        pet.hello();
    }
}

三.IOC入门案例☜

准备Dog类

package com.jt.demo3;
public class Dog implements Pet {
    public Dog(){
        System.out.println("我是无参构造!!!");
    }
    @Override
    public void hello() {
        System.out.println("小狗汪汪汪!!!");
    }
}
package com.jt.demo3;
public interface Pet {
    //接口的作用? 抽取一些公共的方法!!!
    void hello();
}

准备spring.xml配置文件(在resources里)




    
    


编辑User测试对象

public class User {
    //IOC
    public static void main(String[] args) {
        //1.指定配置文件
        String resourse="spring.xml";
        //2.创建容器对象  加载配置文件
        ApplicationContext context=new ClassPathXmlApplicationContext(resourse);
        //3.从容器中获取对象
        Dog dog=context.getBean(Dog.class);
        //4.调用对象的方法
        dog.hello();
    }
}

IOC对象创建-反射机制

package com.jt.demo3;

public class NewDog {

    

    public static void main(String[] args) throws ClassNotFoundException, InstantiationException, IllegalAccessException {
        Dog dog = (Dog) Class.forName("com.jt.demo3.Dog")
                .newInstance();
        dog.hello();
    }
}
Spring核心-IOC☆ IOC介绍

**Ioc全称Inversion of Control,即“控制反转”,这是一种设计思想。对象创建的权利由Spring框架完成.由容器管理对象的生命周期.

IOC实现原理

容器的数据结构: K-V Map key=bean中的ID, value=实例化的对象

程序执行过程:
1.指定配置文件的名称.
2.当Spring容器加载配置文件时.当按照顺序执行bean标签时,开始创建对象.

3.Spring通过bean标签中的class属性获取类型的路径,之后通过反射机制,实例化对象(必须有无参构造)
4.bean中的ld当做Map中的key,将实例化的对象保存到Map中,当做value.至此Spring容器启动成功!
5.当用户需要获取对象时,可以通过key/或者类型获取对象.

Spring注解开发 关于注解开发说明

如果是2010年,那么还需要对xml配置文件有所了解,但是引入springboot之后,基本不需要使用xml配置文件了,一般都使用注解开发.

编辑配置类

效果: 和配置文件类似
注解作用: 标识/标记
注解1: @Configuration
注解2: @Bean
注解3: @ComponentScan(“com.jt.demo4”) //包扫描注解: 让spring注解生效!

package com.jt.demo4;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;

@Configuration  //标识当前类是配置类
@ComponentScan("com.jt.demo4")  //包扫描注解: 让spring注解生效!!!
public class SpringConfig {
    //作用: 和配置文件类似,管理对象!!!
    
    @Bean
    public Dog dog(){
        return new Dog();
    }
}
编辑测试类
package com.jt.demo4;

import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;

public class User {

    public static void main(String[] args) {
        ApplicationContext context =
                new AnnotationConfigApplicationContext(SpringConfig.class);
        Dog dog = context.getBean(Dog.class);
        dog.hello();
    }
}
Spring中的单例和多例 概念说明

单例对象: Spring中保存一份对象.
多例对象: Spring容器负责创建多次对象. 内存中对象多份.

注解:@Scope(“singleton”) //默认值 单例模式
@Scope(“prototype”)//默认值 多例模式

结论:
1.Spring容器默认条件下,对象都是单例对象. 节省内存空间!

2.Spring容器提供了多例对象的方法,一般适用 数据库链接/资源链接等功能…

@Scope("singleton") //默认单例
    //@Scope("prototype") //多例对象
Spring中的懒加载

注解: @Lazy 添加表示改为懒加载

知识回顾:
懒汉式:用户使用时创建.
饿汉式:不管什么需不需要都要创建

懒加载:Spring容器默认条件下,都会实例化对象. 如果在用户使用时创建对象,则使用懒加载机制!
规则:
1.spring容器启动,对象创建不是懒加载

2.当用户使用时创建对象,是懒加载.

注意事项:

1.如果当前对象是多例模式,则都是懒加载!

2.懒加载的控制,只对单例对象有效

@Configuration  //标识这是一个配置类
@ComponentScan("com.jt") //添加注解包扫描,使得注解有效必须添加
public class SpringConfig {
    //作用: 和配置文件类似,管理对象!
    
    @Bean
    //@Scope("singleton") //默认单例
    //@Scope("prototype") //多例对象
    @Lazy//开启懒加载!!
    public Dog dog(){
        return new Dog();
    }
}
常用注解作用
1@Configuration标识当前类是配置类
2@ComponentScan包扫描注解 扫描注解
3@Bean标识该方法的返回值交给Spring容器管理
4@Scope控制多例和单例
5@Lazy懒加载
第三阶段常用注解
    @Configuration 标识当前类是配置类@ComponentScan 包扫描注解 扫描注解@Bean 标识该方法的返回值交给Spring容器管理@Scope 控制多例和单例@Lazy 懒加载@PostConstruct 初始化方法@PreDestroy 销毁方法@Component 将当前类未来的对象交给容器管理@Autowired 按照类型进行注入@Qualifier 按照名称进行注入@Repository 标识持久层注解@Service 标识Service层@Controller 标识Controller层@Value 为属性赋值 @Value("${key}")@PropertySource 加载指定路径的配置文件properties@Aspect 标识当前类是一个切面类@Pointcut 用于定义切入点表达式 表达式写法4种@EnableAspectJAutoProxy 让AOP的注解有效果@Before AOP-前置通知@AfterReturning AOP-后置通知@AfterThrowing AOP-异常通知@After AOP-最终通知@Around AOP-环绕通知@Order(1) //可以利用order关键字 实现AOP的排序 数字越小越先执行.@ResponseBody 将返回的数据转化为JSON串, 如果是字符串本身 原数据返回@RequestMapping("/hello") 实现浏览器的请求路径与方法的映射@PathVariable restFul结构,接收参数的注解.@GetMapping("") 只能接收GET请求类型@DeleteMapping("") 只能接收DELETE请求类型@PostMapping("") 只能接收POST请求类型@PutMapping("") 只能接收PUT请求类型@RestController 表示Controller类,同时要求返回值为JSON@CrossOrigin 允许跨域访问@RequestBody 参数接收时,将JSON串转化为java对象 json中的key与对象的属性一致.@Data lombok动态生成get/set/toString/equals/hashcode等方法@Accessors 控制是否开启链式加载结构@NoArgsConstructor 生成无参构造方法@AllArgsConstructor 生成全参构造方法@Mapper mybatis将当前的接口交给Spring容器管理. Map<类名小写,JDK动态代理对象>@SpringBootTest 该注解的作用在进行代码测试时启动spring容器,之后动态的获取对象 注意包路径 主启动类的同包及子包中.@Param Mybatis中将参数封装为Map集合. @Param(“maxAge”) int maxAge@Alias Mybatis中定义对象的别名 @Alias(“User”)@MapperScan Mybatis中扫描指定包路径的接口 为其创建代理对象.@Insert Mybatis 新增操作注解@Update Mybatis 修改操作注解@Delete Mybatis 删除操作注解@Select Mybatis 查询操作注解@Transactional Spring中用来控制事务@RestControllerAdvice Controller层的全局异常处理@ExceptionHandler 按照某种异常类型进行拦截@TableName(“item_cat”) MybatisPlus注解POJO与数据表绑定 注意表名@TableId(type = IdType.AUTO) MybatisPlus注解 标识主键/主键自增@TableField(exist = false) MybatisPlus注解 标识属性是否存在,及名称是否一致
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/711734.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

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

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