# Springboot框架解析

参考资料:entity,bo,vo,po,dto,pojo如何理解和区分 (opens new window)

# 1、对象及分层概念

  • Entity:最常用的实体类,基本和数据表一一对应,一个实体一张表
  • Bo:business object,业务对象,将业务逻辑封装为一个对象,通过调用dao方法,结合po或vo进行业务操作。
  • Vo:value object,值对象,用于业务层之间传递数据,由new创建,gc回收,主要体现在视图的对象,对于一个WEB页面将整个页面的属性封装成一个对象,然后用一个VO对象在控制层与视图层进行传输交换。
  • Po:persistant object,持久层对象,对应数据库中表的字段,一个Po对应数据库中的一条记录
  • Dto:data transfer object,数据传输对象,接口间传递的数据封装
  • Pojo:plian ordinary java object,简单无规则java对象,最基本的Java Bean只有属性加上get和set方法,可以转换为Po,Dto,Vo
  • Dao:data access object,数据访问对象,负责持久层的操作,主要用来封装数据的访问,注意不是对数据库的访问
  • Controller:控制层,业务层与视图层打交道的中间层,负责传输vo对象和调用bo对象,负责视图层请求的数据处理后响应给视图层。
  • View:视图层,由静态资源、jsp等文件形成
  • Assembler:组装类,对象转换

相关思想:

# 2、spring mvc:controller接口

- /src/main/
  - java/com.icbc.hz1.inforisk/rule
    - common: RuleConstant.java   							 //常量定义
    - controller:LinkCtlRuleController.java     //controller接口定义,调用service接口   
    - vo:LinkCtlRuleQueryVo.java、LinkCtlRuleDetailDto.java   //controller接口输入输出类
    - service:LinkCtlRuleServiceImpl.java、LinkCtlRuleService.java  //服务接口和实现类
    - dao:LinkRuleDao.java、LinkRuleDaoImpl.java   //数据访问接口
    - mapper:LinkctlRuleMapper.java、LinkctlRuleMapper.xml  //数据接入层
    - entity:LinkctlRule.java   //数据表对应的实体类
	- java/com.icbc.hz1.inforisk/Application.java  //启动类
  - resources  //静态资源及相关配置
    - config:ssic.pub
    - staticF5Check.html   //静态资源
    - application.properties //工程配置
- /src/test/
  - java/com.icbc.hz1.inforisk/rule   			//单元测试类,接口实现类
    - controller:LinkCtlRuleControllerTest.java    
    - dao:LinkRuleDaoImplTest.java
    - service:LinkCtlRuleServiceImplTest.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19

# 1、controller

  • @RestController

  • @ApiVersion(1)

  • @Api(value="xxx", produces="application/json")

  • @RequestMapping(value="/linkctl/rule")

  • @ApiOperation(value="xxx")

  • @PostMapping(value="/delete")@GetMapping(value="/getInfos")

  • @RequestBody、@RequestParam(required = false)

  • @Validated

# 2、dao

  • @UsingDataSource(DataSources.GCMS_GMIS)

# 3、entity

  • @Table(name="GMIS.AFW_MAG")
  • @Id
  • @Column(name="AREA_CODE")
  • @PostConstruct

# 4、vo

  • @ApiModel(value="xxx", description="xxx")

# 6、启动类

  • @SpringBootApplication(scanBasePackages={"com.icbc.hz1.inforisk"})
  • @EnableMultipleDataSource(dataSourceName={"DataSources.GCMS_GMAG"}, defaultName="xxx", databaseType="xxx")
  • @MapperScan(basePackages={"xxxx"}, sqlSessionFactoryRef="xx",configs={})

# 7、测试类

  • @RunWith(MockitoJUnitRunner.class)
  • @InjectMocks
  • @Mock
  • @Test
  • @Before

# 9、配置类

  • @Configuration
  • @AutoConfigureBefore({xxxxx.class})
  • @Bean
  • @ConditionalOnProperty
  • @Value("# { @environment['shire.sso.maxSession'] ?: 1}")

# 3、常用注解

# 1、注解相关操作

  • @Target:注解作用域,TYPE可用于类或接口上,METHOD表示修饰方法
  • @Retention:注解生命周期
  • @Documented:注解被javadoc工具记录
  • @Import:通过导入方式实现把实例加入springIOC容器中
  • @Interface:注解类定义,jdk1.5后引入
@Target({ElementType.TYPE}) //注解作用域:类或接口
@Retention(RetentionPolicy.RUNTIME) //保留在运行时
@Documented
@Import(RuleEngineConfiguration.class)
public @interface EnableRuleEngine {
}
1
2
3
4
5
6

# 2、配置类相关操作

  • @Configuration:定义配置类,内部包含有被@Bean注解的方法,这些方法被ApplicationContext上下文类进行扫描,并构建对于的bean,加入spring容器中
  • @Bean:方法级注解,产生一个Bean对象。initMethod属性和destoryMethod属性,指定Bean在构造之后和销毁之前需要执行的方法名。获取使用注解:
    • @PostConstruct:构造函数执行完之后执行
    • @PreDestroy:bean销毁前执行
  • @scope:实例范围
    • Singleton:单例
    • Prototype:每次调用新建一个Bean的实例
    • Request:Web项目中,给每一个http request新建一个Bean实例
    • Session:web项目中,给每一个http session新建一个Bean实例
  • @lazy:懒加载,默认在容器启动的时候创建对象,修改为第一个使用时创建对象并实例化
  • @profile("development"):标记不同的配置环境,通常应用于不同环境启动
  • @Conditional:满足条件给容器注册bean

# 3、依赖注入

# 1、注解声明

  • @Component:组件,没有明确的角色
  • @Service:业务逻辑层使用,生成bean时规则,第一个变小写,两个字母都大写则会都变为小写,使用@Service("xx")重定义类名字
  • @Repository:在数据访问层DAO层使用
  • @Controller:在展现层MVC使用

# 2、注入

  • @Autowired:Spring提供的注解。类型、限定符、命名匹配,配合@Qualifier注解,指令beanName
  • @Inject:JSR-330提供的注解。类型、限定符、命名匹配,配合@Named注解,指定beanName
  • @Resource:JSR-250提供的注解。命名、类型、限定符匹配

解析:@Autowired、@Inject、@Resource可注解在set方法上或者属性上,从代码清晰度考虑,建议注解在属性

# 3、扩展

BeanPostProcessor定义了两个接口:

public interface BeanPostProcessor{
   //前置处理:bean初始化方法调用前被调用
   Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException;
   //后置处理:bean初始化方法调用后被调用
   Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException;
}
1
2
3
4
5
6

# 4、内置注解

  • @Override:重写方法
  • @Deprecated:过时的,已经被新的形式取代
  • @FuntionalInterface:用于接口,被注解的接口是一个函数式接口,仅包含一个抽象方法的接口,有lambda表达式使用,非函数式接口报错
  • @SuppressWarning:抑制编译器可能的警告
Last Updated: 7/9/2022, 5:10:36 PM