註解:就是一個類,使用@
註解名稱。實際開發中:使用註解取代 xml 配置文件。java
一、經常使用註解釋義web
@componentspring
取代 <bean class="">
@Component("id")ide
取代 <bean id="" class="">
web開發,提供3個 @Component 註解衍生註解取代<bean class="">函數
@Repository(「名稱」):dao層@Service(「名稱」):service層測試
@Controller(「名稱」):web層this
web 開發中其餘經常使用註解日誌
@Autowired:自動根據類型注入@Qualifier(「名稱」):指定自動注入的id名稱code
@Resource(「名稱」)component
@ PostConstruct 自定義初始化
@ PreDestroy 自定義銷燬
二、案例代碼演示
接口和實現類
public interface UserService { void add(User user); } ========================================================================================= @Component public class UserServiceImpl implements UserService { @Override public void add(User user) { System.out.println("添加用戶信息..."+user); } }
配置 bean.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:annotation-config/> <!-- 註解的位置--> <context:component-scan base-package="com.example.demo"/> </beans>
測試函數
public class ServiceTest { public static void main(String[] args) { ApplicationContext context = new ClassPathXmlApplicationContext("beans.xml"); UserService userService = context.getBean(UserServiceImpl.class); User user = new User(); user.setUsername("元始天尊"); user.setAge(999); user.setPassword("555"); userService.add(user); } }
控制檯日誌信息以下:添加用戶信息...User{username='元始天尊', password='555', age=999}
三、重點:註解是如何取代 xml 中 bean 的配置
a、在類中聲明@Component 至關於配置了 :
<bean class="com.example.demo.service.impl.UserServiceImpl"></bean>b、Spring默認狀況下註解不生效,須要開啓註解功能 :
<!-- 開啓註解--> <context:annotation-config/> <!-- 註解的位置--> <context:component-scan base-package="com.example.demo"/>c、使用註解時 需注意 bean.xml 配置的約束文件,不然不會生效:
四、還可使用如下配置
@Component("userService") public class UserServiceImpl implements UserService { private String name; public void setName(String name) { this.name = name; } @Override public void add() { System.out.println("建立用戶...." + name); } @Override public void add(User user) { System.out.println("添加用戶信息..."+user); } }
public class ServiceTest { public static void main(String[] args) { ApplicationContext context = new ClassPathXmlApplicationContext("beans.xml"); UserService userService = (UserService)context.getBean("userService"); User user = new User(); user.setUsername("元始天尊"); user.setAge(999); user.setPassword("555"); userService.add(user); } }
2 種運行的結果都是同樣的。@Component("userService") 就是加上了 id ,就至關於在 Spring 容器中注入的時候有了惟一的 id 號碼,因此在獲取的時候能夠經過 id 獲取,即
UserService userService = (UserService)context.getBean("userService");。