Spring2之后,出现很多注解,这些注解让Spring的配置变得混乱起来,因此,别人力排Spring的注解。 注解引发的问题:/ j+ H5 p6 {8 f0 S6 s$ I* N
1、缺乏明确的配置导致程序的依赖注入关系不明确。) x* `9 y* i$ v0 `
2、不利于模块化的装配。
f3 k8 b- y" e! Q5 } 3、给维护带来麻烦,因为你要根据源代码找到依赖关系。
2 x& }5 O( g* R 4、通用性不好。如果你哪天抛开了Spring,换了别的Ioc容器,那么你的注解要一个个的删除。
/ n: E: H2 D! {7 Q4 h: ]2 L 但是很多傻X级的程序员还偶尔给你用点,或半用半不用,当你问及的时候,还一本正经的说某某某书上就是这么用的!!!如果你接手他的代码,会很郁闷。/ \' z. R$ b: w( u" Q; S" ~
这里写个例子,为的是看懂带注解的代码,不是推崇注解有多高级,真没必要。
6 y' R. o0 ]& _ _# Q( \8 Q package lavasoft.springstu.anno;
7 ~3 G9 L! y" A6 w4 ?5 o/ Q /**
' o8 r3 Y* p i. ~ * 一个普通的Bean
* [3 P+ \/ t- S; s q0 {4 Z3 d& S *
R6 r/ p8 e$ k; O* ^+ K */+ L9 p' H/ Z& I6 w# V6 S7 k
public class Foo {- h; U5 x. j0 T8 r& J
private String name;
1 f6 R+ j2 _( n$ n, P, a public Foo(String name) {5 g& n3 m& e( J5 f
this.name = name;- n- `( `+ d! O- @6 @) a; O
}
; c d4 L- r& B* M: H public String getName() {
& t5 ]% ^: f4 l! m return name;4 L2 o, [; C, u5 \ ~% s4 A) V
}
) S& W# s2 r, L8 q- G3 x i public void setName(String name) {% `- Y0 { K( b2 X4 c: {* Z
this.name = name;5 H u+ G p% m; f; H
}
3 Q+ x+ D- Q5 W- _$ R }
% ]* w2 q& |' B package lavasoft.springstu.anno;
" D8 d5 o p- T$ I8 n6 ^5 S import org.springframework.beans.factory.annotation.Autowired;8 r& c! ]" k. H" S' \- @. B9 L
/**
$ ]+ n0 x- y: a" s% A) b4 [ * Spring自动装配的注解
; q7 V8 e+ _2 g7 q$ T7 c) U( \ *# o1 r* `- Z# z+ {2 ~" r* y
*/: Q6 ?) h7 z! Q5 X
public class Bar {
! h5 e$ O. G6 i" |/ X @Autowired(required = true)
' J) _- n) s8 l private Foo foo;
1 }5 o. m4 P: |8 q c public void f1() {$ [2 j, m1 A" C& m: [" q% Z7 q) X
System.out.println(foo.getName());
; L% p2 h5 ? ^+ k }
: j/ G2 n- G6 N7 V) M. Z( G N+ y( r+ s
} |