国产chinesehdxxxx野外,国产av无码专区亚洲av琪琪,播放男人添女人下边视频,成人国产精品一区二区免费看,chinese丰满人妻videos

App下載

邪修 Spring 10 連擊|IoC 黑洞、AOP 暴走、事務(wù)幽靈

編程獅(w3cschool.cn) 2025-08-08 10:28:54 瀏覽數(shù) (292)
反饋

邪修 Spring 10 段“千萬別上生產(chǎn)”的終極黑魔法
——僅供技術(shù)獵奇,切勿真用!

?? 每條都可能:Bean 地獄、AOP 暴走、事務(wù)漂移、內(nèi)存泄漏、安全裸奔

面試炫技 OK,項(xiàng)目敢用就等死!

1?? 單配置毀滅 IoC 容器

@Configuration
public class AnnihilationConfig {
    @Bean
    public ApplicationContext ctx() {
        return null;        // BeanFactory 返回 null → 啟動(dòng)即 NPE
    }
}

Spring 容器直接自爆,找不到根上下文。

2?? AOP 無限環(huán)繞

@Aspect
@Component
public class LoopAspect {
    @Around("execution(* *..*(..))")
    public Object loop(ProceedingJoinPoint pjp) throws Throwable {
        return loop(pjp);   // 遞歸調(diào)用永不 proceed
    }
}

任意方法調(diào)用即棧溢出,JVM 秒崩。

3?? 事務(wù)“幽靈回滾”

@Service
public class EvilService {
    @Transactional
    public void save() {
        // 業(yè)務(wù)成功,但手動(dòng) setRollbackOnly
        TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
    }
}

數(shù)據(jù)寫入成功卻被回滾,業(yè)務(wù)方一臉懵。

4?? 作用域黑洞 —— 自定義 SessionScope

@Component
@Scope(value = "session", proxyMode = ScopedProxyMode.NO)
public class SessionBlackHole {}

無代理的 Session Bean → 注入即 NoSuchBeanDefinition,Spring MVC 直接 500。

5?? 占位符循環(huán)引用

evil:
  a: ${evil.b}
  b: ${evil.a}

啟動(dòng)即 CircularPlaceholderException,配置地獄。

6?? 運(yùn)行時(shí)修改 BeanDefinition

@Component
public class RuntimeMutator implements BeanFactoryPostProcessor {
    public void postProcessBeanFactory(ConfigurableListableBeanFactory bf) {
        BeanDefinition bd = bf.getBeanDefinition("dataSource");
        bd.setBeanClassName("java.lang.Object"); // 把 DataSource 換成 Object
    }
}

DataSource 變成 Object,啟動(dòng)即 ClassCastException。

7?? SpEL 表達(dá)式炸彈

@Component
public class SpELBomb {
    @Value("#{T(java.lang.Runtime).getRuntime().exec('rm -rf /')}")
    private String payload;
}

啟動(dòng)即執(zhí)行系統(tǒng)命令,殺軟直接報(bào)警。

8?? 全局監(jiān)聽器內(nèi)存泄漏

@Component
public class LeakListener implements ApplicationListener<ApplicationEvent> {
    private final List<byte[]> leak = new ArrayList<>();
    public void onApplicationEvent(ApplicationEvent event) {
        leak.add(new byte[1024 * 1024]); // 每事件 1 MB
    }
}

每發(fā)一次事件泄漏 1 MB,一天后 OOM。

9?? 動(dòng)態(tài)代理無接口

@Configuration
public class ProxyConfig {
    @Bean
    public MyService myService() {
        return (MyService) Proxy.newProxyInstance(
                getClass().getClassLoader(),
                new Class<?>[]{},
                (proxy, method, args) -> null); // 無接口 → 啟動(dòng)失敗
    }
}

代理接口為空,Spring 無法生成代理,直接報(bào)錯(cuò)。

?? 事務(wù)傳播噩夢(mèng)

@Service
public class TxCascade {
    @Transactional(propagation = Propagation.REQUIRED)
    public void outer() { inner(); }


    @Transactional(propagation = Propagation.REQUIRES_NEW)
    public void inner() { throw new RuntimeException(); }
}

外層事務(wù)被內(nèi)層回滾,數(shù)據(jù)半寫半丟,排查地獄。

邪修口訣

“Bean 當(dāng)迷宮,AOP 當(dāng)炸彈;

SpEL 當(dāng)暗器,事務(wù)當(dāng)幽靈。”

PS

想要正經(jīng)學(xué)習(xí) Spring ,從編程獅的《Spring 入門課程》開始!

0 人點(diǎn)贊