Struktur proyeknya adalah sebagai berikut:
Bagaimana cara berpikirnya? Pemrograman menuju abstraksi?
Mari kita lihat diagram urutannya terlebih dahulu
Apa yang bisa dilihat dari gambar di atas? Kalau kalian pemula, aneh kalau bisa lihat apa itu, jadi biarkan saja. Mari kita lihat implementasi spesifiknya
Pertama, kita perlu membuat kelas entitas: Pengguna, yang ditempatkan di bawah paket model.
paket com.wwj.model; /** * Kelas entitas * @penulis wwj * Musim semi */ kelas publik Pengguna { nama pengguna String pribadi; kata sandi String pribadi; { ini.nama pengguna = nama pengguna; } string publik getPassword() { mengembalikan kata sandi; } public void setPassword(String kata sandi) { ini.kata sandi = kata sandi;
Berikut ini adalah cara memprogram untuk abstraksi. Singkatnya, cara memprogram untuk antarmuka.
paket com.wwj.dao; import com.wwj.model.User; /** * Pemrograman berorientasi abstraksi* @author wwj * Keuntungan: peningkatan fleksibilitas*/ antarmuka publik UserDAO { public void save(User user });
Terlihat jelas bahwa antarmuka ini mendeklarasikan sebuah metode, metode simpan, yang memiliki parameter objek Pengguna. Kita dapat menganggapnya digunakan untuk menyimpan objek Pengguna ke database.
Serahkan implementasi spesifik pada kelas implementasi
paket com.wwj.dao.impl; import com.wwj.dao.UserDAO; import com.wwj.model.User; /** *Kelas implementasi antarmuka* @author wwj * */ kelas publik UserDAOImpl mengimplementasikan UserDAO{ @Override public void save(Pengguna pengguna) { System.out.println("simpan pengguna");
Keuntungannya adalah jika Anda ingin mengubah lingkungan database, Anda dapat secara fleksibel menentukan kode database yang berbeda.
Bagaimana cara memanggil metode di atas? Untuk memisahkan logika bisnis dari operasi database, kita perlu mendefinisikan kelas logika bisnis.
paket com.wwj.service; import com.wwj.dao.UserDAO; import com.wwj.dao.impl.UserDAOImpl; import com.wwj.model.User; * */ Layanan Pengguna kelas publik { UserDAO pribadi userDAO; UserDAO publik getUserDAO() { mengembalikan userDAO } kekosongan publik setUserDAO(UserDAO userDAO) { this.userDAO = userDAO } public void add(Pengguna pengguna) { this.userDAO.save(pengguna);
Kita bisa lihat, ada sesuatu di dalamnya, sesuatu? UserDAO, pernahkah Anda melihat efeknya? Akan aneh jika Anda melihatnya. Konsep IOC, juga disebut DI, dirancang di sini. Arti Cina disebut injeksi ketergantungan, juga disebut inversi kontrol Musim semi.
Berikut ini benar-benar simulasi implementasi Spring, yang mirip dengan pola pabrik. Dengan menggunakan Spring, kita dapat merakit objek yang berbeda untuk digunakan.
Pertama lihat file konfigurasi beans.xml
<beans> <bean id="u" /> <bean id="userService" > <nama properti="userDAO" bean="u"/> </bean> </beans>
metode pabrik
paket com.wwj.spring; antarmuka publik BeanFactory { Objek publik getBean(Nama string });
Kelas yang mem-parsing file xml dan mengimplementasikan BeanFactory
paket com.wwj.spring; impor java.lang.reflect.Method; impor java.util.HashMap; impor java.util.List; ; import org.jdom.input.SAXBuilder; kelas publik ClassPathXmlApplicationContext mengimplementasikan BeanFactory{ //Tentukan wadah untuk menyimpan objek private Map<String,Object> beans = new HashMap<String, Object>(); public ClassPathXmlApplicationContext() throws Exception{ SAXBuilder sb = new SAXBuilder(); .getClass().getClassLoader().getResourceAsStream("beans.xml")); Elemen root = doc.getRootElement(); //Dapatkan node root Daftar list = root.getChildren("bean"); //Semua elemen bernama bean for(int i = 0; i < list.size(); i++) { Elemen elemen = (Elemen) list.get(i); String id = element.getAttributeValue("id"); //Dapatkan nilai id String cla = element.getAttributeValue("class"); o = Class.forName(cla).newInstance(); System.out.println(id); System.out.println(cla); beans.put(id,o); )element.getChildren("property")){ String nama = propertyElement.getAttributeValue("name"); //UserDAO String bean = propertyElement.getAttributeValue("bean"); //u Object beanObject = beans.get(bean);//UserDAOImpl instance //Gabungkan nama metode dan implementasikan metode setUserDAO String methodName = "set" + name.substring(0 , 1) .toUpperCase() + nama.substring(1); Sistem.keluar.println("nama metode = " + Namametode); //Gunakan mekanisme refleksi untuk mendapatkan objek metode Method m = o.getClass().getMethod(methodName, beanObject.getClass().getInterfaces()[0]); metode} } } @Override public Object getBean(Nama string) { return beans.get("id");
Mari kita adakan kelas ujian
paket com.wwj.service; import org.junit.Test; import com.wwj.model.User; import com.wwj.spring.BeanFactory; import com.wwj.spring.ClassPathXmlApplicationContext; penulis wwj * */ public class UserServiceTest { @Test public void testAdd() melempar Pengecualian{ BeanFactory beanFactory = ClassPathXmlApplicationContext(); Layanan Pengguna baru =(UserService)beanFactory.getBean("userService");
Kita dapat melihat beberapa petunjuk dari kelas pengujian. Pertama, tentukan objek BeanFactory. Gunakan objek ini untuk menukar metode getBean untuk mendapatkan objek kelas logika bisnis. Nanti, Anda dapat menambahkan objek pengguna ke database dengan memanggil metode add kelas layanan ini. Tentu saja, penyisipan ke dalam database tidak diterapkan di sini, tetapi pengujian dilakukan secara sederhana. Faktanya, keseluruhan prosesnya sangat jelas. File konfigurasi inti Spring mengontrol objek. Ketika akan digunakan, objek tersebut disuntikkan ke kelas layanan. Kelas layanan dapat menggunakan objek lapisan DAO untuk melakukan aktivitas terkait database operasi.
Di atas adalah konten konfigurasi pegas yang dikumpulkan secara online. Saya harap dapat bermanfaat bagi semua orang.