内容简介:回文数、数据库多租户初学者指南、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
推荐一本书 《小狗钱钱》 不仅仅是一本理财书籍,更多的是自我的管理。包含了自信、行动、复利、耐心。
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。