1.注解:就是一个类,使用@注解名称
开发中:使用注解 取代 xml配置文件。
@Component取代<bean class=""> @Component("id") 取代 <bean id="" class="">
2.web开发,提供3个@Component注解衍生注解(功能一样)取代<bean class="">
@Repository :dao层
@Service:service层
@Controller:web层
3.依赖注入 ,给私有字段设置,也可以给setter方法设置
普通值:@Value("")
引用值:
方式1:按照【类型】注入 @Autowired 方式2:按照【名称】注入1 @Autowired @Qualifier("名称") 方式3:按照【名称】注入2
@Resource("名称")
4.生命周期
初始化:@PostConstruct
销毁:@PreDestroy
5.作用域
@Scope("prototype") 多例
注解使用前提,添加命名空间,让spring扫描含有注解类
例子一:
beans.xml
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd"> <!-- 组件扫描,扫描含有注解的类 --> <context:component-scan base-package="com.jd.annotation.ioc"></context:component-scan> </beans>
UserService.java
package com.jd.annotation.ioc; /** * @author weihu * @date 2018/8/14/014 0:16 */ public interface UserService { void addUser(); }
UserServiceImpl.java
package com.jd.annotation.ioc; import org.springframework.stereotype.Component; /** * @author weihu * @date 2018/8/14/014 0:16 * * @Component("id") 取代 <bean id="" class=""> */ @Component("userServiceId") public class UserServiceImpl implements UserService { @Override public void addUser() { System.out.println("添加用户成功!"); } }
TestAnnoIoC.java
package com.jd.annotation.ioc; import org.junit.Test; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; /** * @author weihu * @date 2018/8/14/014 0:19 */ public class TestAnnoIoC { @Test public void testAnnotitaion(){ String xmlPath="com/jd/annotation/ioc/beans.xml"; ApplicationContext applicationContext = new ClassPathXmlApplicationContext(xmlPath); UserService userService = (UserService) applicationContext.getBean("userServiceId"); userService.addUser(); } }
例子二:
beans.xml
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd"> <!-- 组件扫描,扫描含有注解的类 --> <context:component-scan base-package="com.jd.annotation.web"></context:component-scan> </beans>
StudentAction.java
package com.jd.annotation.web; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; /** * @author weihu * @date 2018/8/14/014 0:25 controller层 */ @Controller("studentActionId") public class StudentAction { @Autowired //默认按照类型 private StudentService studentService; public void execute(){ studentService.addStudent(); } }
StudentDao.java
package com.jd.annotation.web; /** * @author weihu * @date 2018/8/14/014 0:28 */ public interface StudentDao { void save(); }
StudentDaoImpl.java
package com.jd.annotation.web; import org.springframework.stereotype.Repository; /** * @author weihu * @date 2018/8/14/014 0:29 * * Repository :dao层 */ @Repository("studentDaoId") public class StudentDaoImpl implements StudentDao{ @Override public void save() { System.out.println("save dao"); } }
StudentService.java
package com.jd.annotation.web; /** * @author weihu * @date 2018/8/14/014 0:26 */ public interface StudentService { void addStudent(); }
StudentServiceImpl.java
package com.jd.annotation.web; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.stereotype.Service; /** * @author weihu * @date 2018/8/14/014 0:27 service层 */ @Service public class StudentServiceImpl implements StudentService { private StudentDao studentDao; @Autowired @Qualifier("studentDaoId") public void setStudentDao(StudentDao studentDao) { this.studentDao = studentDao; } @Override public void addStudent() { studentDao.save(); } }
TestAnnoWeb.java
package com.jd.annotation.web; import org.junit.Test; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; /** * @author weihu * @date 2018/8/14/014 0:44 */ public class TestAnnoWeb { @Test public void testAnnotion(){ String xmlPath="com/jd/annotation/web/beans.xml"; ApplicationContext applicationContext = new ClassPathXmlApplicationContext(xmlPath); StudentAction studentAction = applicationContext.getBean("studentActionId", StudentAction.class); studentAction.execute(); } }
例子三:
beans.xml
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd"> <!-- 组件扫描,扫描含有注解的类 --> <context:component-scan base-package="com.jd.annotation.other"></context:component-scan> </beans>
UserService.java
package com.jd.annotation.other; public interface UserService { public void addUser(); }
UserServiceImpl.java
package com.jd.annotation.other; import javax.annotation.PostConstruct; import javax.annotation.PreDestroy; import org.springframework.context.annotation.Scope; import org.springframework.stereotype.Service; @Service("userServiceId") //@Scope("prototype") public class UserServiceImpl implements UserService { @Override public void addUser() { System.out.println("d_scope add user"); } @PostConstruct public void myInit(){ System.out.println("初始化"); } @PreDestroy public void myDestroy(){ System.out.println("销毁"); } }
TestOther.java
package com.jd.annotation.other; import org.junit.Test; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; public class TestOther { @Test public void testBeforeAndAfter(){ //spring 工厂 String xmlPath = "com/jd/annotation/other/beans.xml"; ClassPathXmlApplicationContext applicationContext = new ClassPathXmlApplicationContext(xmlPath); UserService userService = applicationContext.getBean("userServiceId" ,UserService.class); UserService userService2 = applicationContext.getBean("userServiceId" ,UserService.class); System.out.println(userService); System.out.println(userService2); applicationContext.close(); } }