瀏覽代碼

2024年4月7日 11点13分

starlight_0208 5 月之前
父節點
當前提交
8e7d2818cf

+ 9 - 5
src/main/java/org/starter/learning/AppTest.java

@@ -14,7 +14,7 @@ public class AppTest {
         // 获取IoC容器
         // ApplicationContext 是一个接口需要使用new创建一个对应的实现类对象
         // ClassPathXmlApplicationContext 是一个ApplicationContext的实现,用于从Classpath中的xml获取应用配置
-        ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");
+        ClassPathXmlApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");
         // 获取Bean
 //        BookDao bookDao = (BookDao) ctx.getBean("bookDao");
 //        List<Book> bookList = bookDao.getBooks();
@@ -23,9 +23,13 @@ public class AppTest {
 //        BookService bookService1 = (BookService) ctx.getBean("bookService");
 //        bookService1.listBook();
 //        System.out.println(BookService.class);
-        BookDao bookDao1 = (BookDao) ctx.getBean("bookDao");
-        BookDao bookDao2 = (BookDao) ctx.getBean("bookDao");
-        System.out.println(bookDao1);
-        System.out.println(bookDao2); 
+//        BookDao bookDao1 = (BookDao) ctx.getBean("bookDao");
+//        BookDao bookDao2 = (BookDao) ctx.getBean("bookDao");
+//        System.out.println(bookDao1);
+//        System.out.println(bookDao2);
+        ctx.registerShutdownHook();
+        BookDao bookDao = (BookDao) ctx.getBean("bookDao");
+        bookDao.getBooks();
+//        ctx.close();
     }
 }

+ 10 - 0
src/main/java/org/starter/learning/dao/impl/BookDaoImpl.java

@@ -18,4 +18,14 @@ public class BookDaoImpl implements BookDao {
         bookList.add(new Book("112235", "Hello World3", "asm3"));
         return  bookList;
     }
+
+    // Bean创建后执行的方法
+    public void init() {
+        System.out.println("After create...");
+    }
+
+    // Bean销毁前执行的方法
+    public void destroy() {
+        System.out.println("Before destroy...");
+    }
 }

+ 23 - 3
src/main/java/org/starter/learning/service/impl/BookServiceImpl.java

@@ -1,5 +1,7 @@
 package org.starter.learning.service.impl;
 
+import org.springframework.beans.factory.DisposableBean;
+import org.springframework.beans.factory.InitializingBean;
 import org.starter.learning.dao.BookDao;
 import org.starter.learning.dao.impl.BookDaoImpl;
 import org.starter.learning.pojo.Book;
@@ -7,8 +9,8 @@ import org.starter.learning.service.BookService;
 
 import java.util.List;
 
-public class BookServiceImpl implements BookService {
-    private BookDao bookDao = new BookDaoImpl();
+public class BookServiceImpl implements BookService, InitializingBean, DisposableBean {
+    private BookDao bookDao;
     public BookServiceImpl() {
         System.out.println("BookService object created!");
     }
@@ -18,7 +20,25 @@ public class BookServiceImpl implements BookService {
     }
 
     // 提供的对应的Setter方法
-    public void setBookDao(BookDao bookDao) {
+//    public void setBookDao(BookDao bookDao) {
+//        System.out.println("Setting bookDao into BookService Implement...");
+//        this.bookDao = bookDao;
+//    }
+
+
+    public BookServiceImpl(BookDao bookDao) {
         this.bookDao = bookDao;
     }
+
+    // 对象创建后执行的方法 -- 初始化
+    @Override
+    public void afterPropertiesSet() throws Exception {
+        System.out.println("BookService Initializing...");
+    }
+
+    // 对象销毁前执行的方法 -- 销毁
+    @Override
+    public void destroy() throws Exception {
+        System.out.println("BookService will be destroy.");
+    }
 }

+ 14 - 0
src/main/java/org/starter/learning/setting/ConnectionInfo.java

@@ -0,0 +1,14 @@
+package org.starter.learning.setting;
+
+public class ConnectionInfo implements ConnectionInfoTemplate{
+    private int connectionNum;
+    private String connectionName;
+
+    public void setConnectionNum(int connectionNum) {
+        this.connectionNum = connectionNum;
+    }
+
+    public void setConnectionName(String connectionName) {
+        this.connectionName = connectionName;
+    }
+}

+ 5 - 0
src/main/java/org/starter/learning/setting/ConnectionInfoTemplate.java

@@ -0,0 +1,5 @@
+package org.starter.learning.setting;
+
+public interface ConnectionInfoTemplate {
+    // Not Implemented
+}

+ 9 - 2
src/main/resources/applicationContext.xml

@@ -12,12 +12,19 @@
     <!-- 通过工厂本身来创建对象 -->
 <!--    <bean id="book" factory-bean="bookServiceFactory" factory-method="getBookService" />-->
     <!-- 配置方式4:FactoryBean方式实例化 -->
-    <bean id="bookDao" class="org.starter.learning.factory.BookDaoFactoryBean" />
+<!--    <bean id="bookDao" class="org.starter.learning.factory.BookDaoFactoryBean" />-->
+    <bean id="bookDao" class="org.starter.learning.dao.impl.BookDaoImpl" init-method="init" destroy-method="destroy" />
     <bean id="bookService" class="org.starter.learning.service.impl.BookServiceImpl">
         <!--配置Service和Dao之间的关系-->
         <!--property标签表示配置当前bean的属性-->
         <!--name属性表示配置哪一个具体的属性-->
         <!--ref属性表示参照哪一个bean-->
-        <property name="bookDao" ref="bookDao" />
+<!--        <property name="bookDao" ref="bookDao" />-->
+        <!-- 构造器注入方式,提供构造器 -->
+        <constructor-arg name="bookDao" ref="bookDao" />
+    </bean>
+    <bean id="connectionInfo" class="org.starter.learning.setting.ConnectionInfo">
+        <property name="connectionName" value="mysql" />
+        <property name="connectionNum" value="100" />
     </bean>
 </beans>