Bootstrap

Spring篇—Spring注解开发,含@Component、@Service、@Repository、@Controller等注解的讲解和使用,一篇文章搞定!

注解开发的前提

使用注解开发的前提:
1、首先要确保我们确定将aop的包导进来了,直接在maven中导入MVC的依赖即可将这些其他的依赖都导入进来

<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-webmvc</artifactId>
    <version>5.2.0.RELEASE</version>
</dependency>

2、确保在applicationContext.xml核心配置文件中导入了context约束3、确保导入了注解的支持

<!--开启注解的支持-->
    <context:annotation-config/>

4、也可以通过扫描的形式,扫描某个包下的所有注解都生效(如果使用扫描的形式,那么上面注解的支持可以省略掉,亲测)

<context:component-scan base-package="com.sss.pojo"/>

注解汇总

一、@component

组件的意思,放在类的上面,说明该实体类被Spring管理了,就是我们常说的Bean
该注解的作用相当于我们在applicationContext.xml核心配置文件中对Bean进行注册的操作,然后这个实体类的id默认就是该类的名字小写

等价于:

<bean id="user" class="com.guohui.pojo.User"/>

使用方法:
定义实体类

@Component
public class User {
    private String name = "张三";

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}

测试:

public class MyTest {
    @Test
    public void test(){
        ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
        User user = context.getBean("user", User.class);
        String name = user.getName();
        System.out.println(name);
    }
}

控制台:

非常重要!!!拓展:

@component将来在MVC三层架构中衍生出三个不同的注解,用于每一层,但是他们的作用都是等价的,都表示组件的意思,使用了这个注解,同样表示该类被Spring管理,表示将该类注册到spring容器中,装配Bean
1、Dao层:用@Repository

@Repository
public class UserDao {
}

2、Service层:用@Servie

@Service
public class UserService {
}

3、Controller层:用@Controller

@Controller
public class UserController {
}

最后呢,将applicationContext.xml核心配置文件中的组件扫描扩大范围,就能将不同层的组件扫描进来

<!--开启注解的支持-->
<context:component-scan base-package="com.sss"/>

二、@value

给属性赋值,放在实体类的属性上或者放在这个属性的set方法上

使用方法:

@Component
public class User {
    @Value("李四")
    private String name;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}

测试:

public class MyTest {
    @Test
    public void test(){
        ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
        User user = context.getBean("user", User.class);
        System.out.println(user.getName());
    }
}

控制台:

三、@Scope

该注解常用来表示某个Bean的作用域,可以选择单例singleton或者原型模式prototype

1、单例模式        

@Component
@Scope("singleton")
public class User {
    @Value("李四")
    private String name;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}

测试:

public class MyTest {
    @Test
    public void test(){
        ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
        User user1 = context.getBean("user", User.class);
        User user2 = context.getBean("user", User.class);

        System.out.println(user1 == user2);
    }
}

控制台:

2、原型模式

@Component
@Scope("prototype")
public class User {
    @Value("李四")
    private String name;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}

测试:

public class MyTest {
    @Test
    public void test(){
        ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
        User user1 = context.getBean("user", User.class);
        User user2 = context.getBean("user", User.class);

        System.out.println(user1 == user2);
    }
}

控制台:

至此,关于Spring的注解开发技术栈,你已经掌握,尤其是关注@component注解和他的拓展,将来在SpringBoot框架开发中,会频繁的使用这几个注解的!预祝各位早日成为全栈工程师,欢迎指正和交流!

;