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

 

很多程序员通过在类上使用@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:

最新文章

  1. insertion sort(插入排序)
  2. https://developers.google.com/maps/documentation/javascript/examples/places-autocomplete-addressform
  3. 如何在HTML5 Canvas 里面显示 Font Awesome 图标
  4. Caliburn实现MVVM模式的编程
  5. java文件复制函数
  6. UVA 11489 - Integer Game(找规律)
  7. linux基础命令学习(一)
  8. 解决Unable to connect to a repository at URL 禁止访问 (forbidden)
  9. 关于用自带摄像机录像无法捕获uri 问题解决
  10. 栈 & 堆 |--> 内存管理
  11. OSChinaclient源代码学习(1)--Android与Server的交互
  12. Intellij-创建Maven项目速度慢
  13. Python高阶函数之 - 装饰器
  14. linux-0.11 内核源码学习笔记一(嵌入式汇编语法及使用)
  15. Spring配置文件中的那些标签意味着什么(持续更新)
  16. GDB常用命令系列
  17. 第十一章 dubbo通信框架-netty4
  18. 异常处理:No serializer found for class org.hibernate.proxy.pojo.javassist.JavassistLazyInitializer
  19. 全局修改composer源地址
  20. Vue学习笔记 ——v-html

热门文章

  1. 用bosybox制作文件系统
  2. PAT甲级——1058 A+B in Hogwarts
  3. Image.FromStream(ms) 提示参数无效
  4. VB.NET XOR 运算
  5. iOS 开发中有关pch文件,以及pch常用的内容
  6. Redis实现分布式读写锁(Java基于Lua实现)
  7. golang kafka clinet 内存泄露问题处理
  8. String的compareTo用法
  9. HTTP协议八种请求类型介绍
  10. deeplearning.ai 改善深层神经网络 week3 超参数调试、Batch Normalization和程序框架