日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

009_IOC注解开发

發布時間:2025/4/17 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 009_IOC注解开发 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一. @Component注解

1. @Component注解, 組件的意思, 修飾一個類, 有一個value屬性, 可以給組件指定一個名字。相當于我們在Spring的XML配置文件里, 配置了一個bean, 給bean指定了一個名字, 并指定類。

2. @Component注解有三個衍生注解, 功能類似, 推薦使用:

2.1. @Controller: 修飾Web層類。

2.2. @Service: 修飾service層類。

2.3. @Repository: 修飾dao層類。

二. 屬性注解

1. 普通屬性注解: @Value設置普通屬性的值。

2. 對象屬性

2.1. @Autowired: 設置對象類型屬性的值。但是是按照類型完成屬性注入的。

2.2. @Qualifier: 按照名稱完成屬性注入。

2.3. 通常@Autowired和@Qualifier注解配合使用, 完成對象類型屬性的按名稱注入。

2.4. @Resource: 完成對象類型屬性的按名稱注入。一個注解完成了@Autowired和@Qualifier兩個注解所做的事情, 推薦使用。

三. IOC注解例子

1. 新建一個名為IOCAnnotation的Java工程, 拷入相關jar包

2. 新建一個名為UserDao.java的接口

package com.lywgames.dao;public interface UserDao {public void save(); }

3. 新建一個名為UserDaoImpl.java的類實現UserDao.java接口

package com.lywgames.dao.impl;import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Component; import com.lywgames.dao.UserDao;@Component(value="userDao") // 相當于我們在Spring的XML配置了一個bean,<bean name="userDao" class="com.lywgames.dao.impl.UserDaoImpl"/> public class UserDaoImpl implements UserDao {@Value("張三") // 注冊普通屬性private String name;@Overridepublic void save() {System.out.println("保存" + name + "成功。");}}

4. 新建一個名為UserService.java的接口

package com.lywgames.service;public interface UserService {public void save(); }

5. 新建一個名為UserServiceImpl.java的類實現UserService.java接口

package com.lywgames.service.impl;import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.stereotype.Component; import com.lywgames.dao.UserDao; import com.lywgames.service.UserService;@Component(value="userService") // 相當于我們在XML配置了一個bean,<bean name="userService" class="com.lywgames.service.impl.UserServiceImpl"/> public class UserServiceImpl implements UserService {@Autowired // 注冊對象類型@Qualifier(value="userDao") // 按照名稱完成屬性注入private UserDao userDao;@Overridepublic void save() {userDao.save();}}

6. 新建一個名為UserAction.java的類

package com.lywgames.web.action;import org.springframework.context.support.ClassPathXmlApplicationContext; import com.lywgames.service.UserService;public class UserAction {public static void main(String[] args) {ClassPathXmlApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");UserService userService = applicationContext.getBean(UserService.class);userService.save();applicationContext.close();}}

7. 在src目錄下創建applicationContext.xml

8. 運行項目

四. Bean生命周期和作用域注解

1. 生命周期相關的注解

1.1. 初始化方法的注解@PostConstruct

1.2. 銷毀方法的注解@PreDestroy

2. bean作用范圍的注解@Scope

2.1. @Scope的值

2.1.1. singleton: 默認單例。

2.1.2. prototype: 多例。

2.1.3. request: 應用在web項目中, Spring創建這個類的對象以后, 將這個對象存入到request范圍中。

2.1.4. session: 應用在web項目中, Spring創建這個類的對象以后, 將這個對象存入到session范圍中。

2.2. 添加@Scope注解

五. Bean生命周期和作用域注解

1. 新建一個名為IOCAnnotationLifeCycle的Java工程, 拷入相關jar包

2. 新建一個名為UserDao.java的接口

package com.lywgames.dao;public interface UserDao {public void save(); }

3. 新建一個名為UserDaoImpl.java的類實現UserDao.java接口

package com.lywgames.dao.impl;import javax.annotation.PostConstruct; import javax.annotation.PreDestroy; import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.Scope; import org.springframework.stereotype.Repository; import com.lywgames.dao.UserDao;@Repository(value="userDao") // 相當于我們在XML配置了一個bean,<bean name="userDao" class="com.lywgames.dao.impl.UserDaoImpl"/> @Scope(value="prototype") public class UserDaoImpl implements UserDao {@Value("張三") // 注冊普通屬性private String name;public UserDaoImpl() {System.out.println("UserDaoImpl被創建了");}@PostConstructpublic void init() {System.out.println("UserDaoImpl被初始化了");}@Overridepublic void save() {System.out.println("保存" + name + "成功。");}@PreDestroypublic void destroy() {System.out.println("UserDaoImpl被銷毀了");}}

4. 新建一個名為UserService.java的接口

package com.lywgames.service;public interface UserService {public void save(); }

5. 新建一個名為UserServiceImpl.java的類實現UserService.java接口

package com.lywgames.service.impl;import javax.annotation.Resource; import org.springframework.stereotype.Service; import com.lywgames.dao.UserDao; import com.lywgames.service.UserService;@Service(value="userService") // 相當于我們在XML配置了一個bean,<bean name="userService" class="com.lywgames.service.impl.UserServiceImpl"/> public class UserServiceImpl implements UserService {@Resource(name="userDao") // 完成對象的按名稱注入private UserDao userDao;@Overridepublic void save() {userDao.save();}}

6. 新建一個名為UserAction.java的類

package com.lywgames.web.action;import org.springframework.context.support.ClassPathXmlApplicationContext; import com.lywgames.service.UserService;public class UserAction {public static void main(String[] args) {ClassPathXmlApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");UserService userService = applicationContext.getBean(UserService.class);userService.save();applicationContext.close();}}

7. 在src目錄下創建applicationContext.xml

8. 運行項目

六. XML方式和注解方式

1. XML方式和注解方式比較

?

基于XML配置

基于注解配置

Bean定義

<bean id="" class=""/>

@Component: 修飾一個類

?

@Component的衍生類

@Controller: 修飾Web層類

@Service: 修飾service層類

@Repository: 修飾dao層類

Bean名稱

通過id或name指定

@Component(value="")

Bean注入

構造函數注入:

<constructor-arg name="id" value="101"/>

屬性注入:

<property name="id" value="102"/>

p命名空間:

<bean p:id="" p:teacher-ref=""/>

SpEL表達式:

<property name=="" value="#{}"/>

@Autowired:

按類型注入

@Qualifier(value=""):?

按照名稱完成屬性注入

?

@Resource(name=""):

完成對象類型屬性的按名稱注入

聲明周期

<bean init-method="" destroy-method=""/>

@PostConstruct初始化

@PreDestroy銷毀

Bean作用范圍

<bean scope=""/>

@Scope(value="")

適用場景

適用性更廣, 結構更加清晰。

適用類是自己定義, 開發更方便。

2. XML和注解的整合開發

2.1. XML定義類

2.2. 注解屬性注入

七. XML和注解的整合開發例子

1. 新建一個名為IOCXMLAnnotation的Java工程, 拷入相關jar包

2. 新建一個名為UserDao.java的接口

package com.lywgames.dao;public interface UserDao {public void save(); }

3. 新建一個名為UserDaoImpl.java的類實現UserDao.java接口

package com.lywgames.dao.impl;import org.springframework.beans.factory.annotation.Value; import com.lywgames.dao.UserDao;public class UserDaoImpl implements UserDao {@Value("張三") // 注冊普通屬性private String name;@Overridepublic void save() {System.out.println("保存" + name + "成功。");}}

4. 新建一個名為UserService.java的接口

package com.lywgames.service;public interface UserService {public void save(); }

5. 新建一個名為UserServiceImpl.java的類實現UserService.java接口

package com.lywgames.service.impl;import javax.annotation.Resource; import com.lywgames.dao.UserDao; import com.lywgames.service.UserService;public class UserServiceImpl implements UserService {@Resource(name="userDao") // 完成對象的按名稱注入private UserDao userDao;@Overridepublic void save() {userDao.save();}}

6. 新建一個名為UserAction.java的類

package com.lywgames.web.action;import org.springframework.context.support.ClassPathXmlApplicationContext; import com.lywgames.service.UserService;public class UserAction {public static void main(String[] args) {ClassPathXmlApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");UserService userService = applicationContext.getBean(UserService.class);userService.save();applicationContext.close();}}

7. 在src目錄下創建applicationContext.xml

8. 運行項目

《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀

總結

以上是生活随笔為你收集整理的009_IOC注解开发的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。