Java程序员常用的@Component、@Repository、@Controller、@Serv

Java程序员常用的@Component、@Repository、@Controller、@Service系列【案例demo3】
Java程序员常用的@Component、@Repository、@Controller、@Serv

很多程序员通过在类上使用@Repository、@Component、@Service 和 @Constroller 注解,Spring会自动创建相应的 BeanDefinition 对象,并注册到 ApplicationContext 中。这些类就成了 Spring受管组件。这三个注解除了作用于不同软件层次的类,其使用方式与@Repository 是完全相同的。

处理类:org.springframework.context.annotation.ScannedGenericBeanDefinition

[if !supportLists]· [endif]项目包结构

F:.

├─java

│ └─com

│ └─example

│ └─demo3

│ │ Demo3Application.java

│ │

│ ├─controll

│ │ StuController.java

│ │

│ ├─dao

│ │ StuDao.java

│ │ StuDaoImp.java

│ │

│ ├─entity

│ │ Stu.java

│ │

│ └─server

│ StuService.java

│ StuServiceImp.java

└─resources

application.properties

    project.text

[if !supportLists]· [endif]控制器角色StuController

package com.example.demo3.controll;

import org.springframework.stereotype.Controller;

@Controller

public class StuController {

}

[if !supportLists]· [endif]数据角色StuDao、StuDaoImp

package com.example.demo3.dao;

public interface StuDao {

}

package com.example.demo3.dao;

import org.springframework.stereotype.Repository;

@Repository

public class StuDaoImp implements StuDao{

}

[if !supportLists]· [endif]服务角色StuService、StuServiceImp

package com.example.demo3.server;

public interface StuService {

}

package com.example.demo3.server;

import org.springframework.stereotype.Service;

@Service

public class StuServiceImp implements StuService {

}

[if !supportLists]· [endif]其它组件角色Stu

package com.example.demo3.entity;

import org.springframework.stereotype.Component;

@Component

public class Stu {

String name;

public Stu(String name) {

    this.name = name;

}

public Stu() {

}

public String getName() {

    return name;

}

public void setName(String name) {

    this.name = name;

}

@Override

public String toString() {

    return "Stu{" +

            "name=‘" + name + ‘\‘‘ +

            ‘}‘;

}

}

[if !supportLists]· [endif]Demo3Application(启动程序)

package com.example.demo3;

import com.example.demo3.controll.StuController;

import com.example.demo3.dao.StuDao;

import com.example.demo3.entity.Stu;

import com.example.demo3.server.StuService;

import org.springframework.boot.SpringApplication;

import org.springframework.boot.autoconfigure.SpringBootApplication;

import org.springframework.context.ConfigurableApplicationContext;

@SpringBootApplication

public class Demo3Application {

public static void main(String[] args) {

    ConfigurableApplicationContext context = SpringApplication.run(Demo3Application.class, args);

    //@Component注册的组件,名称默认都是类名的首字母小写

    //纯属于注解方式注册组件

    //之所以能力扫描到这些包,因为注解@AutoConfigurationPackage的作用(但必须满足所有组件都在启动类所在包的平级或子集)

    StuController stuController = context.getBean("stuController", StuController.class);

    Stu stu = context.getBean("stu", Stu.class);

    StuDao stuDaoImp = context.getBean("stuDaoImp", StuDao.class);

    StuService stuServiceImp = context.getBean("stuServiceImp", StuService.class);

    //打印都有地址

    System.out.println(stuController);

    System.out.println(stu);

    System.out.println(stuDaoImp);

    System.out.println(stuServiceImp);

    context.close();

}

}

AnnotationConfigApplicationContext与ConfigurableApplicationContext的关系

总结:

1.上下文基本架构关系

2.ConfigurableApplicationContext:

3.ClassPathXmlApplicationContext:

4.AnnotationConfigApplicationContext:

相关推荐