1、Spring DIMade by Michael.S注入方法 -21.Setter 注入 -22.Constructor 注入 -23.接口注入(了解) -2简单属性注入 -3Bean 的声明周期 -31.Sigleton -32.Prototype-3集合注入 -3AutoWire-4byName -4byType -5LifeCycle-5lazy-init-5init-method 和 destory-method -5Annotation -6Autowire public void setStudent(Student student)this.student = student;类
2、 StudentService会根据自己类中局部变量的名字(student)在 beans.xml中查找名字一样的bean(student),然后进行装配。byType根据类型来进行装配注意:如果在 beans.xml中有两个是同一个类型的( 例如都是 Student)类型的 bean,就会报错。注意:byName 和 byType可以写在 标签上,就对所有的 bean进行auto-wire。在 中的 autowire=”default” 就是依据中的 default-autowire设置。LifeCyclelazy-init若不加,一旦 ApplicationContext new 出来,所
3、有的 bean就都 new出来;加上了,当getBean()的时候才会初始化。注意:也可以在 beans中设置init-method和 destory-method初始化的时候调用 init,容器关闭的时候调用 destoryComment Mike2: 好像只能用ApplicationContext,用 BeanFactory会抛出异常(不清楚是什么原因,有知道的情联系我) 。注意:一般非 web程序,需要 ClassPathXmlApplicationContext.destory( )才能调用 destory.顺序还是先 new 这个 bean,然后再调用 init方法,最后执行 des
4、tory方法。如果 scope是 sigleton那么就算是两个 bean对象也只会调用一次 init;但是如果 scope是prototype, 那么就会调用两次 init。AnnotationAutowire 可以在 setter方法上面加Autowired public void setStudentDao (StudentDao studentDao)this. studentDao = studentDao;可以在构造方法上面加Autowired public StudentService(StudentDao studentDao)this. studentDao = studen
5、tDao;可以在普通方法上面加Autowiredpublic void addStudent(Student student)System.out.println(student.getName();2.DTD BEAN 的 xml 文件Xml 的文件头不变,只需要添加即可。而不需要添加。因为 的用途就是配置了AutowiredAnnotationBeanPostProcessor, CommonAnnotationBeanPostProcessor,PersistenceAnnotationBeanPostProcessorRequiredAnnotationBeanPostProcesso
6、r注意:如果autowire默认是byType,如果xml 文件中有两个是同样的类型需要被注入(用非 Annotation法会抛出异常) ,这里需要在参数上面添加QualifierAutowired public void setStudentDao (Qualifier(“student2“) StudentDao studentDao)注意:Qualifier(“student2“ )中的 “student2“是可以在xml的bean中配置的,或者不用在bean中配置 qualifire,默认与name ,id相同。注意:可以设置Autowired(required=false),即表示不
7、是必须要进行织入,如果没有响应的不会抛出异常Resource和 autowire 结果差不多,推荐使用 Resource,可以在局部变量和 setter 方法上面进行ResourceResource(name=“student2“)public void addUser(Student student)默认是 byName,找不到的时候再 byType,可以用(name=”student2”)来指定用哪一个同类型的 bean。Component使用Component 能够在 xml 文件中不配置任何 bean1.在 xml 文件中添加其中 base-package 指的是从哪个包中找你要的 b
8、ean这样就可以将 xml 文件中的 bean 都删除掉2.在 bean 所代表的类上面加上ComponentComponentpublic class Student3.在需要这个 bean 的地方可以用Resource 进行注入Resourcepublic void addUser(Student student)完成!注意:一般推荐在Component 上面加上 name:Component(“student“ ),然后再Resource(name=“student“),这样能够更加清楚、准确地进行定位。提示:也可以在xml文件中删除studentService 的bean,在StudentService的类上加上Component(“studentService“) ,最后在main 方法中依然使用context.getBean(“studentService”);注意:1.可以在Component 上面添加Scope(“prototype“)来指定 bean 的范围(prototype / sigleton)2.在方法上面加PostConstruct 可以指定 bean 的 init 方法;在方法上面加PreDestroy 可以指定 bean 的 destory 方法。