zoukankan      html  css  js  c++  java
  • Spring入门系列-使用注解开发

    使用注解开发

    在spring4之后,想要使用注解形式,必须得要引入aop的包

    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans"
          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xmlns:context="http://www.springframework.org/schema/context"
          xsi:schemaLocation="http://www.springframework.org/schema/beans
           http://www.springframework.org/schema/beans/spring-beans.xsd
           http://www.springframework.org/schema/context
           http://www.springframework.org/schema/context/spring-context.xsd">
    
    </beans>
    

    Bean的实现

    我们之前一直都是使用bean的标签来进行bean的注入,但是在实际的开发过程中,我们一般都会使用注解!

    1. 制定注解扫描包
    <!--指定注解扫描包-->
    <context:component-scan base-package="com.kuang.pojo"/>
    
    1. 在指定的包下编写类,增加注解
    package com.dreamcold.demo.pojo;
    
    import org.springframework.stereotype.Component;
    
    @Component("user")
    //相当于在配置文件中<bean id="user" class="当前注解的类"/>
    public class User {
        private String name="dreammcold";
    }
    
    1. 测试
    package com.dreamcold.demo;
    
    import com.dreamcold.demo.pojo.User;
    import org.junit.jupiter.api.Test;
    import org.springframework.context.ApplicationContext;
    import org.springframework.context.support.ClassPathXmlApplicationContext;
    
    public class HelloTest {
    
        @Test
        public void test(){
            ApplicationContext context=new ClassPathXmlApplicationContext("beans.xml");
            //我们的对象都在Spring中管理
            User user=(User)context.getBean("user");
            System.out.println(user.name);
        }
    }
    
    

    属性注入

    使用注解注入属性

    1. 可以不使用set方法,直接在直接名上添加@value("值")
    package com.dreamcold.demo.pojo;
    
    import org.springframework.beans.factory.annotation.Value;
    import org.springframework.stereotype.Component;
    
    @Component("user")
    //相当于在配置文件中<bean id="user" class="当前注解的类"/>
    public class User {
       
       @Value("dreamcold")
       public String name;
    }
    
    
    1. 如果提供set方法,在set方法上添加@value("值");
    package com.dreamcold.demo.pojo;
    
    import org.springframework.beans.factory.annotation.Value;
    import org.springframework.stereotype.Component;
    
    @Component("user")
    //相当于在配置文件中<bean id="user" class="当前注解的类"/>
    public class User {
    
       public String name;
    
       @Value("dreamcold")
       public void setName(String name) {
          this.name = name;
       }
    }
    
    

    衍生注解

    我们这些注解就是替代了在配置文件当中配置步骤而已,更加的方便快捷!

    为了更好的进行分层,spring提供了可以使用的其他三个注解,功能一样,目前使用哪一个功能都一样。

    • controller:web层
    • service层:service层
    • repository:dao层

    写上这些注解,就相当于将这个类交给spring管理装配了

    自动装配注解

    在bean的自动装配已经讲过了,可以回顾!

    作用域

    @scope

    • singleton;默认的,spring会采用单例的模式创建这个对象,关闭工程,所有的对象都会销毁

    • prototype:多例模式,关闭工程,所有的对象都不会销毁。内部的垃圾回收机制会回收

    package com.dreamcold.demo.pojo;
    
    import org.springframework.beans.factory.annotation.Value;
    import org.springframework.context.annotation.Scope;
    import org.springframework.stereotype.Component;
    
    @Component("user")
    //相当于在配置文件中<bean id="user" class="当前注解的类"/>
    @Scope("prototype")
    public class User {
    
       public String name;
    
       @Value("dreamcold")
       public void setName(String name) {
          this.name = name;
       }
    }
    
    

    小结

    • xml可以应用于任何的常见,结构清晰,方便维护
    • 注解不是自己提供的类使用不了,开发简单方便

    xml与注解整合开发:推荐最佳实践

    • xml管理bean
    • 注解完成属性注入
    • 使用过程中,可以不用扫描,扫描是为了类上加注解
    <context:annotation-config/>  
    

    作用:

    • 进行注解驱动注册,从而使得注解生效
      -用于激活那些已经在spring容器注解过的bean上面的注解,也就是显示的向spring注册
    • 如果不扫描包,就需要手动的配置bean
    • 如果不加注解驱动,就注入的值为null

    基于Java类进行配置

    • JavaConfig是Spring的一个子项目
    • 它通过Java类的方式提供Bean的定义信息,在Spring4的版本,JavaConfig已经成为Spring4的核心功能
    1. 编写一个实体类,Dog
    package com.dreamcold.demo.pojo;
    
    
    import org.springframework.stereotype.Component;
    
    @Component
    public class Dog {
        public String name="dog";
    }
    
    
    1. 新建一个config配置包,编写一个MyConig配置类
    package com.dreamcold.demo.config;
    
    import com.dreamcold.demo.pojo.Dog;
    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.Configuration;
    
    @Configuration
    public class MyConfig {
        
        //通过方法注册一个bean,这里的返回值就是Bean的类型,方法名就是bean的id
        @Bean
        public Dog dog(){
            return  new Dog();
        }
    }
    
    
    1. 测试
    package com.dreamcold.demo;
    
    import com.dreamcold.demo.config.MyConfig;
    import com.dreamcold.demo.pojo.Dog;
    import org.junit.jupiter.api.Test;
    import org.springframework.context.ApplicationContext;
    import org.springframework.context.annotation.AnnotationConfigApplicationContext;
    
    public class TestDemo02 {
    
        @Test
        public void test2(){
            ApplicationContext applicationContext=new AnnotationConfigApplicationContext(MyConfig.class);
            Dog dog=(Dog)applicationContext.getBean("dog");
            System.out.println(dog.name);
        }
    }
    
    

    导入其他配置

    1. 我们再编写一个配置类
    package com.dreamcold.demo.config;
    
    import org.springframework.context.annotation.Configuration;
    
    @Configuration
    public class MyConfig2 {
    }
    
    
    1. 在之前的配置类中我们来选择导入这个配置类
    package com.dreamcold.demo.config;
    
    import com.dreamcold.demo.pojo.Dog;
    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.Configuration;
    import org.springframework.context.annotation.Import;
    
    @Configuration
    @Import(MyConfig.class)
    public class MyConfig {
    
        //通过方法注册一个bean,这里的返回值就是Bean的类型,方法名就是bean的id
        @Bean
        public Dog dog(){
            return  new Dog();
        }
    }
    
    

    关于这种Java类的配置方式,我们在之后的SpringBoot 和 SpringCloud中还会大量看到,我们需要知道这些注解的作用即可!

    学习自链接:狂神说

  • 相关阅读:
    MYsql 之单标查询.
    MYSQL社区版安装手册
    爬虫框架学习
    celery_消息队列
    rabbitMQ消息队列
    Django分页设置
    Mysql-基础+安装指南
    super函数的用法
    hashlib 和loggin模块
    Python的魔法方法
  • 原文地址:https://www.cnblogs.com/mengxiaoleng/p/14940375.html
Copyright © 2011-2022 走看看