ARTS 第 9 周

栏目: Java · 发布时间: 6年前

内容简介:回文数、数据库多租户初学者指南、Sring 根据条件创建 Bean 以及使用 AOP 给类添加新方法。Problem:转为 String, 可惜题目不允许

回文数、数据库多租户初学者指南、Sring 根据条件创建 Bean 以及使用 AOP 给类添加新方法。

Algorithm

Problem: Palindrome Number

思路 1

转为 String, 可惜题目不允许

思路 2

反转数字,但是注意反转时可能会出现溢出现象,所以我们可以只反转一半即可

class Solution {
    public boolean isPalindrome(int x) {
        if(x < 0 || (x%10==0 && x!=0)){
            return false;
        }
        int revertedNumber = 0;
        while(x>revertedNumber){
            revertedNumber = revertedNumber * 10 + x % 10;
            x /= 10;
        }
        return x == revertedNumber || x == revertedNumber/10;
    }
}

Review

数据库多租户初学者指南

有三种设计:

  • 分实例多租户

    一个租户一个数据库实例,很容易实现数据隔离,硬件资源可以隔离(部署在多台机器上)。缺点是当用户没有一定量的时候,比较浪费资源。

  • 分库多租户

    一个租户一个数据库,也很容易实现数据隔离。缺点是硬件资源共享,用户量不大的情况可以选择这种方式。

  • 同表多租户

    同一张表中通过字段来区分。缺点区分逻辑与代码混在一起。适用于项目初期。

Tip

《Spring 实战(第4版)》中的一些小技巧。

根据条件创建 bean

前面分享了使用 @Profile 根据环境创建 bean。

今天分享使用注解 @Conditional 根据自定义条件来判断是否创建 bean。

@Bean
@Conditional(MagicExistsConditional.class)
public MagicBean magicBean(){
    return new MagicBean();
}

设置给 @Conditional 的类可以是任意实现了 Condition 接口的类型。

import org.springframework.context.annotation.Condition;
import org.springframework.context.annotation.ConditionContext;
import org.springframework.core.env.Environment;
import org.springframework.core.type.AnnotatedTypeMetadata;

public class MagicExistsCondition implements Condition {

  @Override
  public boolean matches(ConditionContext context, AnnotatedTypeMetadata metadata) {
    Environment env = context.getEnvironment();
    return env.containsProperty("magic");
  }
  
}

通过 AOP 给类添加新的功能

public interface Teacher {
    void teach();
}

@Component
public class EnglishTeacher implements Teacher {

    @Override
    public void teach() {
        System.out.println("跟我一起学英语");
    }
}
public interface PlayBallAble {
    void play();
}

public class SoccerPlayer implements PlayBallAble {
    @Override
    public void play() {
        System.out.println("我会踢足球");
    }
}

现在定义一个切面,让 EnglishTeacher 会球类运动。

@Aspect
@Component
public class MyAspect {

    @DeclareParents(value = "aop.Teacher+", defaultImpl = SoccerPlayer.class)
    public PlayBallAble playBallAble;
}

@DeclareParents 注解由三部分组成:

  • value 属性指定了哪种类型的 bean 要引入该接口。这里是 Teacher 。(后面的加号表示是 Teacher 子类型,而不是 Teacher 本身)

  • defaultImpl 属性指定了为引入功能提供是实现的类。

  • @DeclareParents 注解所标注的指明了要引入的接口。

测试一下:

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = Config.class)
public class AopTest {

    @Autowired
    private Teacher teacher;

    @Test
    public void test() throws Exception{
        teacher.teach();
        PlayBallAble playBallAble = (PlayBallAble) this.teacher;
        playBallAble.play();
    }
}
跟我一起学英语
我会踢足球

Share

推荐一本书 《小狗钱钱》 不仅仅是一本理财书籍,更多的是自我的管理。包含了自信、行动、复利、耐心。


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

2小时品牌素养

2小时品牌素养

邓德隆 / 2009-1 / 38.00元

《2小时品牌素养(第2版)》第一次系统发布有关中国企业的品牌竞争力分析报告,揭示了中国一流企业在品牌战略上面临的深重危机,提出了定位突围之道和实践方法。全书分上下两篇,上篇详细分析了定位的原理,给出定位的三种方法,并特别为中国企业走向世界指出了三条出路;下篇以王老吉品牌战略历程为例,细致论述了一个品牌打造的完整过程,并就品牌实践中的许多关键问题进行了阐述和研讨。作为兼顾理论和实践的第2版,《2小时......一起来看看 《2小时品牌素养》 这本书的介绍吧!

JSON 在线解析
JSON 在线解析

在线 JSON 格式化工具

HTML 编码/解码
HTML 编码/解码

HTML 编码/解码

Markdown 在线编辑器
Markdown 在线编辑器

Markdown 在线编辑器