一:基于xml的DI(Dependency Injection)
注入類型:
定義學生Student實體類和小汽車Car實體類:進行封裝和生成ToString(),并自定義屬性Car
Student
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 | public ?class ?Student { private ?String name; private ?String age; private ?Car car; ? ?//無參構造 public ?Student() { ???? //System.out.println("Student.Student()"); } ? ?//帶參構造 public ?Student(String name, String age, Car car) { ? ????? this .name = name; ???? this .age = age; ???? this .car = car; } @Override public ?String toString() { ???? return ?"Student [name=" ?+ name +? ", age=" ?+ age +? ", car=" ?+ car +? "]" ; } public ?Car getCar() { ???? return ?car; } ? ?public ?void ?setCar(Car car) { ???? this .car = car; } ? ?public ?String getAge() { ???? return ?age; } ? ?public ?void ?setAge(String age) { ???? this .age = age; } ? ?public ?String getName() { ???? return ?name; } ? ?public ?void ?setName(String name) { ???? this .name = name; } } |
Car:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 | public ?class ?Car { ? ?private ?String color; private ?String brand; ? ?? ?//無參構造 public ?Car() { ????? ?} ? ?//帶參構造 public ?Car(String color, String brand) { ???? super (); ???? this .color = color; ???? this .brand = brand; } ? ?@Override public ?String toString() { ???? return ?"Car [color=" ?+ color +? ", brand=" ?+ brand +? "]" ; } ? ?public ?String getColor() { ???? return ?color; } public ?void ?setColor(String color) { ???? this .color = color; } public ?String getBrand() { ???? return ?brand; } public ?void ?setBrand(String brand) { ???? this .brand = brand; } } |
1.設值注入(set方法注入):本質上是調用了Bean的setXXX()進行值的注入。分為普通屬性和域屬性
實現效果:
?
2.構造注入
?
實現效果:
3.命名空間p注入
? ?使用前要先要在Spring配置文件中引入p命名空間
實現效果:
?
二、集合屬性注入[List、Set、Map]
?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 | public ?class ?MyCollection { private ?List<String> list; private ?Set<String> set; private ?Map<String,String> map; ? ?public ?Map<String, String> getMap() { ???? return ?map; } ? ?public ?void ?setMap(Map<String, String> map) { ???? this .map = map; } ? ?public ?Set<String> getSet() { ???? return ?set; } ? ?public ?void ?setSet(Set<String> set) { ???? this .set = set; } ? ?public ?List<String> getList() { ???? return ?list; } ? ?public ?void ?setList(List<String> list) { ???? this .list = list; } |
配置文件:
?List與Set同理:
?
?
Map雙列集合:
?
三:基于注解的DI
@Component[不分層的情況下]
?
@Repository() [Dao層]
?
@Service() [Biz層]
?
@Controller() [Action類]?
?
? ? ??? ?注:在項目中添加Spring AOP相關的JAR文件以及xsd約束文件。
? ? ? ? ?由于是基于注解的DI,所以無需再Spring配置文件中進行節點配置,只需配置包掃描器即可!
配置包掃描器用途:
該包下以及子包中的類才可以被Spring掃描,去尋找被注解的類和屬性,讓Spring容器管理賦值
?
Student類:
指定@Component中的value即可在測試類中的getBean()中植入即可。
@Value為該屬性賦值
?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | @Component (value= "stu" ) public ?class ?Student { @Value ( "呵呵" )?? private ?String name; @Value ( "13" ) private ?String age; ? ?/* ? * JDK注解 @Resource(name="car2") ? */ ? ?/* ? * Spring注解 ? */ @Autowired @Qualifier (value= "car2" ) ? ?private ?Car car; ? ?@Override public ?String toString() { ???? return ?"Student [name=" ?+ name +? ", age=" ?+ age +? ", car=" ?+ car +? "]" ; } |
?
Car類:
?
1 2 3 4 5 6 7 8 9 10 11 | @Component (value= "car2" ) public ?class ?Car { @Value ( "黑色" ) private ?String color; @Value ( "奧迪" ) private ?String brand; ? ?@Override public ?String toString() { ???? return ?"Car [color=" ?+ color +? ", brand=" ?+ brand +? "]" ; } |
?